Laden...

Forenbeiträge von dev.pr Ingesamt 22 Beiträge

08.02.2018 - 11:36 Uhr

Okey, ja also ist relativ kompliziert, habe auch erst ein c# projekt gefunden wo sowas probiert wurde aber das ist meiner Meinung nach kein UDP hole punching.

Hier mal zum nachlesen: https://www.fluxbytes.com/csharp/udp-hole-punching-implementation-in-c/

vielleicht interpretiere ich es auch falsch 😄.

Hatte vor das Programm später vielleicht mal öffentlich zu machen, dann würde sich der Aufwand schon lohnen. Hätte jemand von euch lust das mit mir zusammen zu machen?

08.02.2018 - 09:54 Uhr

Heißt wenn ich mein Programm nun auf UDP umprogrammiere, bräuchte ich keine Portfreigabe wenn ich den Beitrag richtig verstanden habe?

08.02.2018 - 07:08 Uhr

Hallo, eine Frage hab ich dennoch, ist mir gestern Abend beim nachdenken eingefallen,

wie kommunizieren Spiele und co. ohne eine Portfreigabe zu haben? oder als Beispiel die Seite "Omegle", hat eine direkte Router zu Router verbindung mit dem Gegenüber, dort muss ja dann auch ein offener Port sein oder? Könnte man den nicht einfach nutzen?

07.02.2018 - 13:52 Uhr

Okey, weiß ich bescheid, damit hat sich mein Anliegen denn auch erledigt, vielen dank!

Habe nichts passendes gefunden deswegen habe ich ein Post geöffnet, und schnell eine Antwort bekommen, vielen dank nochmal!

07.02.2018 - 12:46 Uhr

Hey vielen dank für die schnelle Antwort! 😃
Ja ich habe es auch noch ein wenig geschützt, also wenn ein paket reinkommt dort ist ein md5 hash enthalten, den muss man beim absenden eingeben, und nur wenn das der gleiche ist so wie ich ihn auf mein Zielrechner eingerichtet habe klappt es.

Das mit Upnp klingt interessant, lese ich mir mal durch danke!

07.02.2018 - 12:28 Uhr

Hallo Leute,
Ich habe eine Frage.

Ich habe mir ein kleinen TCP-Server programmiert der permanent auf meinen Rechner im Hintergrund läuft, wenn sich jemand auf dieses Programm verbindet auf einen Port den ich vorher festlege, fährt sich mein PC automatisch runter. Soll dafür dienen das ich quasi wenn ich im Wohnzimmer sitze mein Pc ausschalten kann mit meinen Laptop, dass funktioniert auch alles super. Jedoch ist nun meine Frage, wenn ich nicht im selben Netzwerk bin, klappt es denn immer noch? Habe leider nicht die Möglichkeit es zu testen da wir nur ein Netzwerk haben. Falls es klappt, klappt es bei allen Ports oder nur bei bestimmten?

Grüße

22.01.2018 - 11:01 Uhr

Hallo, ja war vielleicht etwas trocken formuliert.

Also nun ein paar Sachen zu meinen "Schreibspiel":

Man muss sich beim einloggen des Spiels einen Account anlegen, auf dem werden dann alle möglichen Sachen gespeichert wie: Freunde, Ergebnisse... um später auch eine Globale Rangliste zu machen.

Es gibt momentan schon eine kleine lokale Datenbank, welche immer Sätze beinhaltet die unterschiedlich schwer sind. Man muss versuchen diesen Text abzutippen, schnell als der Gegner. Je nachdem wie schwierig der Text eingestuft ist gibt es auch unterschiedliche Zeitvorgaben (wenn man offline spielt). Als Ränge gibt es Momentan Gold, Silber und Bronze, je nachdem in welchem Zeitraum man fertig geworden ist. Außerdem bekommt man für das Spielen Coins, mit denen kann man sich dann ingamesachen kaufen wie: Nicknamefabe ändern oder ein automatischer Textüberprüfer beim abschreiben des Textes, also das man quasi sieht was man falsch abgeschrieben hat und sich nicht am ende wundert wo der Fehler ist.

Das ist so das Grundprinzip, Grüße.

22.01.2018 - 10:33 Uhr

Hallo allerseits.

Ich befinde mich mometan im ersten Ausbildungslehrjahr als Fachinformatiker in der Anwendungsentwicklung, programmiere aber c# schon eine ganze weile.

Ich hatte vor einer langen Zeit ein Spiel geschrieben, welches man gegen den Computer spielen konnte, es war ein Schreibspiel. Es funktioniert alles und ich überarbeite mometan noch die Grafiken. Ich suche ein oder mehrere Partner die mir helfen würden das Spiel online zu bringen, ggf. auch bei Steam anzubieten. Mit Protokollen hab ich es noch nicht so ganz, ich habe es zwar geschafft online spiele wo nur 2 Leute spielen können zu programmieren, jedoch lief nie was reibungslos. Ich würde mich sehr über Hilfe freuen, und wenn sich an dem Spiel sogar vielleicht was verdienen lassen sollte wäre ich für eine Gewinnbeteiligung bereit. Für mehr Informationen oder Fragen schreibt mir einfach oder unter dem Thema.

Grüße

06.11.2017 - 10:18 Uhr

Hallo, habe es nicht ganz hinbekommen, deine Variable (Message) habe ich durch receivedMessage ersetzt, hat als string nicht funktioniert und als integer auch nicht. Und beim senden klappt es auch noch nicht so ganz, wenn ich die daten empfange mache ich glaube ich noch einen fehler.


                    byte[] receivedData = new byte[1464];
                    receivedData = (byte[])aResult.AsyncState;
                    ASCIIEncoding eEncoding = new ASCIIEncoding();
                    string receivedMessage = eEncoding.GetString(receivedData);
                    int message = Convert.ToInt32(receivedMessage, 2);
                    var binaryReader = new BinaryReader(message);
                    int x = binaryReader.ReadInt32();
                    int y = binaryReader.ReadInt32();

06.11.2017 - 08:38 Uhr

Hallo,

Werde es gleich mal ausprobieren und mal schauen ob es klappt, vielen dank!

02.11.2017 - 15:20 Uhr

Hallo, weil ich nicht weiß wie ich diese 4 Werte dann wieder trennen soll wenn ich sie erhalt, kannst du mir sagen wie man sowas trennt?

ja werde ich mir mal anschauen danke

02.11.2017 - 14:53 Uhr

Hallo, habe es inkrementiert, und ja es kommt sehr schnell durcheinander.

Kennt jemand noch eine andere möglichkeit so etwas zu regeln?

danke erstmal trotzdem für die Hilfe.

LG

02.11.2017 - 14:10 Uhr

Hallo, danke erst einmal für die schnelle Antwort.

Also so wie das Programm da steht passiert folgendes:

Die X Position von S2 bewegt sich, jedoch nicht die Y Position und der Coin bewegt sich komplett garnicht.

Ich habe mal geschaut, die Picturebox S2 nimmt alle Werte an, dass heißt ich sende von S1 die X und Y werte und von dem Coin(ist auch eine Picturebox) auch die X und Y Werte und beim empfangen greift sich S2 alle Werte und springt dann immer zwischen 4 Werten rum, ich hoffe ich konnte mich gut ausdrücken.

nochmal zusammengefasst S2 denkt das S1 XundY Werte und Coin XundY Werte für S2 als X-Wert gedacht ist

02.11.2017 - 13:46 Uhr

Hallo liebe Community,
ich habe ein kleines Problem, ich bin gerade dabei ein kleines Spiel zu schreiben was man zu 2 über UDP spielen kann. Ja ich weiß auch das UDP nicht die beste Lösung ist aber meine Schule möchte es so.
Ich habe eine Verbindung erfolgreich aufgebaut und bekomme auch erfolgreich daten gesendet und empfangen, jedoch sind diese dann verwurschtelt (nehme ich an). Mein Ziel ist es das wenn ich meine PictureBox bewege, sie sich auf dem anderen Bildschirm auch bewegt, also quasi die Daten von Spieler1 an Spieler2 senden und von Spieler2 an Spieler1. Wenn ich nur die Y-Koordinate sende klappt alles, aber sobald ich die x-koordinate mit sende klappt es nicht mehr. Hier mal mein Code:


private void UDPSENDER_Tick(object sender, EventArgs e)
        {

            //ALG 
            // 0 = X-Wert des Spieler1
            // 1 = Y-Wert des Spieler1
            // 2 = Coin-Koordinate X
            // 3 = Coin-Koordinate Y
            System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
            byte[] msg = new byte[1500];
            if(udpalg == 0)
            {
                msg = enc.GetBytes(x.ToString());
                sck.Send(msg);
                udpalg++;
            }
            else if (udpalg == 1)
            {
                msg = enc.GetBytes(y.ToString());
                sck.Send(msg);
                udpalg++;
            }
            else if (udpalg == 2)
            {
                msg = enc.GetBytes(pictureBox1.Location.X.ToString());
                sck.Send(msg);
                udpalg++;
            }
            else if (udpalg == 3)
            {
                msg = enc.GetBytes(pictureBox1.Location.Y.ToString());
                sck.Send(msg);
                udpalg = 0;
            }
        }

Da werden die Daten gesendet,
hier werden sie empfangen:


private void MessageCallBack(IAsyncResult aResult)
        {
            try
            {
                int size = sck.EndReceiveFrom(aResult, ref epRemote);
                if (size > 0)
                {
                    byte[] receivedData = new byte[1464];
                    receivedData = (byte[])aResult.AsyncState;
                    ASCIIEncoding eEncoding = new ASCIIEncoding();
                    string receivedMessage = eEncoding.GetString(receivedData);
                    //ALG 
                    // 0 = X-Wert des Spieler1
                    // 1 = Y-Wert des Spieler1
                    // 2 = Coin-Koordinate X
                    // 3 = Coin-Koordinate Y
                    if (udpalg == 0)
                    {
                        S2X = Convert.ToInt32(receivedMessage);
                    }
                    else if (udpalg == 1)
                    {
                        S2Y = Convert.ToInt32(receivedMessage);
                    }
                    else if (udpalg == 2)
                    {
                        Coinx = Convert.ToInt32(receivedMessage);
                    }
                    else if (udpalg == 3)
                    {
                        Coiny = Convert.ToInt32(receivedMessage);
                    }
                    S2.Location = new Point(S2X, S2Y);
                    pictureBox1.Location = new Point(Coinx, Coiny);


                }

                byte[] buffer = new byte[1500];
                sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }

was mache ich falsch?

LG

26.10.2017 - 13:04 Uhr

Ok habe jetzt alles so hinbekommen wie ich es wollte, vielen dank für eure Hilfe und eure Geduld! 👍

26.10.2017 - 11:16 Uhr

Tut mir leid, aber was soll ich auf diesem Beispiel erkennen?

26.10.2017 - 10:48 Uhr

Hallo, ja ich weiß das meine Form blockiert, dass ist auch nicht weiter schlimm, denn es soll sich auch maximal nur einer verbinden können.

Vielen dank für deine Tipps, jedoch umsetzen kann ich sie leider nicht so richtig. Was meinst du mit der Socket wird zum Client?

Grüße und danke für die Geduld

26.10.2017 - 10:25 Uhr

Hallo, hat doch noch nicht ganz geklappt, was mache ich falsch?
Hier mal der Code:

Client:

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "" || textBox2.Text == "") { c = 1; }

            if (c == 1)
            {
                Log.AppendText("Verbindung nicht möglich. Passwort oder IP-Adresse fehlt\n");
            }
            else
            {
                Log.AppendText("Versuche Verbindung aufzubauen \n");
            }
            if (c == 0)
            {
                try
                {
                    IPAddress adresse = IPAddress.Parse(textBox1.Text);
                    IPEndPoint endpoint = new IPEndPoint(adresse, Convert.ToInt32(textBox3.Text));
                    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                    socket.Connect(endpoint);
                    Log.AppendText("Erfolgreich verbunden, Passwort wird geprüft");
                    try
                    {
                        string str = "Testpassword";
                        byte[] byData = System.Text.Encoding.ASCII.GetBytes(str);
                        socket.Send(byData);
                    }
                    catch (SocketException se)
                    {
                        MessageBox.Show("NICHT GEKLAPPT");
                    }
                }
                catch
                {
                    Log.AppendText("PC konnte nicht erreicht werden.");
                }
            }
        }



Serverseite:


{
IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 7);
        Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                socket.Bind(endpoint);
                socket.Listen(0);

                socket.Accept();
                timer2.Start();
                c = 1;
            }
            catch
            {
            }
        }

        private void timer2_Tick(object sender, EventArgs e)
        {

            byte[] buffer = new byte[1024];
            try
            {
                int iRx = socket.Receive(buffer);
            }
            catch
            {
                MessageBox.Show("ERROR SERVER");
            }
            String recievedText = System.Text.Encoding.ASCII.GetString(buffer);
            textBox1.Text = recievedText;
        }
}


Der Client connected mit dem Server und sendet auch die Bytes, jedoch empfängt der Server sie nicht.

26.10.2017 - 08:48 Uhr

Hallo, danke für die vielen Ratschläge, habe mein Problem erkannt, ich habe nie den unterschied zwischen TCPClient und Socket verstanden, deswegen bin ich bei den ganzen Codeprojekten durcheinander gekommen weil ich dachte es ist das gleiche.

Vielen dank!
Den rest habe ich selber herausgefunden

25.10.2017 - 15:44 Uhr

Hallo, danke für die schnelle Antwort.
Habe ich vielleicht falsch formuliert, ich weiß nicht wie man Daten übertragt, bekomme es nur hin eine Verbindung aufzubauen.

Ja ich habe auch einiges im Netz gefunden, nur sehr viel umständlicher als ich es benötige, ich bin noch realtiv neu und kann deswegen mit dem meisten Code nicht viel anfangen.

25.10.2017 - 15:28 Uhr

Hallo Leute, ich habe 2 kleine Programme geschrieben, einen Server und einen Client, ich habe den Server laufen auf meinen PC nun möchte ich mich mit meinen Laptop auf dem PC verbinden, klappt auch alles via TCP, nur kann sich jetzt jeder verbinden der die IP und den Port meines PC´s kennt. Deswegen möchte ich im Client ein Textbox als Passwortfeld nutzen, wenn man dann auf senden drückt soll es via tcp an meinen pc gesendet werden und mit dem passwort PC verglichen werden. Wenn es richtig ist bleibt die verbindung, wenn nicht wird sie geschlossen.

Kann mir jemand helfen? habe nur umfangreiche Projekte zur Datenversendung via TCP gefunden, mir reicht ein ganz kleiner leichter Ansatz.

grüße