Wie Funktioniert bei Lan Spielen die Netzwerk Kommunikation???



  • Wie Funktioniet sowas am effizentesten?

    Ich denke da an ein Spiel, wo man auf Server Suchen klickt und dann alle Server aufgelistet werden .... (im Lan ist die IP des Servers unbekannt!)

    Dann klickt man auf Verbinden und das Spiel wird gestartet ...

    Jeder Client schickt Informationen an den Server ... dies sollte möglichst sicher gelöst werden...

    Der Server Sendet alle Datenaktualisierungen an den Client.

    So nun meine Fragen:
    1. Eine Serversuche ist bei unbekannter Server IP nur über Broadcast möglich? Und das wiederrum nur über UDP Sockets?
    Wie wird das bei Multiplayerspielen gelößt?

    2. Nachdem der Server gefunden worden ist, verbindet sich der Client mit dem Server ... über TCP oder besser über UDP?
    Tatsache ist, dass der Server nicht über TCP die Informationen an den Client senden kann, da dass (weil ja kein Multicast möglich ist) sonst die Bandbreite ausreitzen würde. Jedoch ist UDP nicht abhorchsicher ...
    Wie wird das bei Multiplayerspielen gelößt?

    3. Ist es bei einem Egoshooter besser, die Position der Spielfigur des Clienten zu senden oder die Benutzereigaben?
    Wie wird das bei Multiplayerspielen gelößt?

    Ich habe mir überlegt, dass eine Kombination aus TCP und UDP die Lösung wäre.

    Es existieren 2 UDP und 1 TCP Verbindung.
    Der Client. Dieser sendet ein Broadcast über UDP, um alle Server zu finden. Die Antwort wird über den selben Socket empfangen.Also Braucht der Client ein UDP Socket zum Senden und zum Empfangen. Der Server teilt seine IP mit und eine Verbindung über TCP kann hergestellt werden. Eingaben/Informationen werden per TCP an den Server gesendet, da ja auch noch andere Server existieren könnten, die dann Informationen filtern müssten. Wenn der Client eine Information nicht korrekt erhalten hat, fordert er sie neu an. Der Server sendet jetzt eine spezielle Nachricht an den Clienten und nicht an alle, da die anderen die Information ja schon haben. Darum wird ein TCP Socket zum Senden und Empfangen benötigt. Die Informationen des Servers werden dann per Multicast empfangen und ausgewertet.
    Und noch ein UDP Socket zum Empfangen.

    Der Server. Dieser benötigt ein UDP Socket zum Empfangen der Client-Server-Suchanfragen und senden der Antwort (Server teilt dem Clienten seine IP mit). Der Server verbindet sich nun per TCP zum Clienten. Er empfängt über ein TCP Socket Informationen von den Clienten und sendet bei bedarf zu einzelnen Clienten zurück (Anfragen). Dazu benötigt der Server ein Socket zum Empfangen und Senden. Die Informationen die für alle sind, sendet der Server per Multicast. Darum braucht der Server noch ein UDP Socket zum Senden.

    So das ist mein Vorschlag ... würde mich über Kritik und Verbesserungsvorschläge freuen!

    LG



  • Thomas_ schrieb:

    Jedoch ist UDP nicht abhorchsicher ...

    brrrrrr schrecklich, was du dir alles zusammen reimst, warum man was nciht verwenden sollte...



  • Thomas_ schrieb:

    1. Eine Serversuche ist bei unbekannter Server IP nur über Broadcast möglich?

    broadcasts gehen aber nicht im internet.
    🙂



  • Thomas_ schrieb:

    1. Eine Serversuche ist bei unbekannter Server IP nur über Broadcast möglich? Und das wiederrum nur über UDP Sockets?
    Wie wird das bei Multiplayerspielen gelößt

    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1434039.html#1434039

    ich schrieb:

    die übliche herangehensweise ist es, dass es so etwas wie einen oder mehrere "master server" gibt, die von anderen servern signalisiert bekommen, dass der gewünschte dienst dort gerade verfügbar ist. clients können diese liste dann abrufen und haben so eine (halbwegs) aktuelle liste verfügbarer server.

    im lan könnte man es auch so machen, dass man einen udp-broadcast rausschickt und alle server melden sich beim empfang des broadcasts beim absender. das funktioniert in kleinen netzwerken ganz gut, im internet aber nicht.

    viel mehr kann man dazu nicht mehr sagen. für matchmaking im internet ist ein zentraler server notwendig, der die adressen aller offenen server vorhält. dessen ip-adresse oder hostname muss bekannt sein.

    2. Nachdem der Server gefunden worden ist, verbindet sich der Client mit dem Server ... über TCP oder besser über UDP?

    die frage ist schonmal falsch gestellt, denn udp ist ein verbindungsloses protokoll. ein client kann sich also per udp gar nicht so "verbinden", wie es mit tcp möglich ist.

    Jedoch ist UDP nicht abhorchsicher ...

    ok. tcp auch nicht.

    Wie wird das bei Multiplayerspielen gelößt?

    unterschiedlich. ist niedrige latenzzeit wichtiger als eine zugesicherte datenübertragung? und/oder müssen sehr viele clients vom gleichen server versorgt werden? dann udp mit reliability layer, ansonsten eher tcp.
    manche spiele verwenden beides.



  • reliability layer klingt sehr interessant.

    Leider habe ich dazu nur sehr dürftige Informationen gefunden ...

    So wie ichs verstanden habe, ist das ein UDP Sende Verfahren, wo man Nachrichten nach ihrer Wichtigkeit einstuft.

    Nachrichten die wichtig aber nicht zeitkritisch sind, werden solange gesendet, bis alle Clients eine Empfangen Nachricht geschickt haben.
    Entsprechentd, Nachrichten die nicht Wichtig sind, unbestätigt bleiben.

    Nachrichten die zeitkritisch sind, werden ebenso nicht bestätigt, da es egal ist, ob sie nicht ankommen oder verspätet.

    Somit ließe sich meine Netzwerk Architektur auf 2 UDP Sockets reduzieren ... eine zum Senden (Broadcast[zur Serversuche] oder normal UDP[zum Senden von Informationen an den Server]) und eine zum Empfangen (Multicast[zum Senden von Informationen an die Clienten]).

    Oder was sagt ihr dazu?

    Vielen Dank!



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • RakNet ist eine gute UDP-LIB, die alles bietet das du für die Spiele-Entwicklung brauchst. 😉

    MfG


Log in to reply