# Socket-Frage zu einem LAN-Spiel.



## Speedy_92 (16. Mai 2012)

Hallo,
ich bin dabei mir ein Konzept für ein LAN-Spiel zu erstellen. Dabei ist natürlich die Netzwerkkommunikation wichtig. Es wird ein Echtzeit-Spiel sein.
Ein Spieler wird einen Server eröffnen und die anderen Spieler müssen sich zu diesem dann verbinden. Allerdings bin ich nun auf die Frage gestoßen, wie die anderen Spieler den Host finden können. Das gesamte Netzwerk nach offenen Servern zu suchen wäre nicht die eleganteste Lösung, daher bin ich auf die Klasse MulticastSocket gestoßen.
Ist es sinnvoll, bei solch einem Spiel mittels MulticastSockets eine Gruppe zu eröffnen und über diese zu kommunizieren oder sollte ich über die Klasse ServerSocket kommunizieren?

Gruß.


----------



## maestr0 (16. Mai 2012)

Auf meiner Homepage hab ich ein Spiel von einem Kollegen hochgeladen. Er hat Vier Gewinnt über LAN programmiert.
Bin mir nicht ganz sicher wie er es gelöst hat,kannst es ja einfach mal anschauen,vielleicht hilft es dir weiter.

http://marco.pf-control.de/projects/VierGewinnt/Projekt_VierGewinntNetzwerk.zip


----------



## langamer (16. Mai 2012)

Ich weis zwar jetzt auch nicht was best-practice in einem solchen Fall wäre, aber ich kann dir eine Idee geben wie ich es gelöst habe:

Der Spieler welcher das Spiel "hosten" möchte wählt die Option "Lobby eröffnen".
Dabei wird bei diesem Spieler lokal der gesamte Game-Server gestartet und zusätzlich ein MulticastSocket an eine bestimmte Adresse und einen Port gelegt. Dieser wartet auf sog. "DISCOVERY" Pakete von einem Clienten.
Der Spieler der nun diesem Spiel beitreten will wählt "Lobby suchen".
Nun passiert erstmal nichts weiter als das der "Client" ein Multicast-Paket ins Netz sendet und auf Antwort von laufenden Servern wartet. Empfängt nun ein Server dieses Paket antwortet auf dieses mit seinen aktuellen Informationen wie z.B. Name der Lobby, Anzahl Spieler, andere Infos.
Da du einen festen Server-Port haben solltest kann sich nun der Client mithilfe der IP aus dieser "OFFER" Paket zum Server verbinden (ich habe für die "Steuer"-Verbindung TCP verwendet, für die real-time-Daten aber trotzdem UDP).
Dabei kann man den Clienten so schreiben das dieser öfter wiederholt "DISCOVERY" Pakete schickt und die Antworten erneut auswertet oder bereits "in der Liste stehende" Server aktualisiert.

Wie ich oben bereits erwähnte : ob das jetzt so best-practice ist oder es andere bzw. bessere Methoden gibt weis ich nicht, aber das ist mein Lösungsansatz. Funktioniert aber nur im selben Sub-Netz.


----------



## Speedy_92 (17. Mai 2012)

maestr0 hat gesagt.:


> Auf meiner Homepage hab ich ein Spiel von einem Kollegen hochgeladen. Er hat Vier Gewinnt über LAN programmiert.
> Bin mir nicht ganz sicher wie er es gelöst hat,kannst es ja einfach mal anschauen,vielleicht hilft es dir weiter.
> 
> http://marco.pf-control.de/projects/VierGewinnt/Projekt_VierGewinntNetzwerk.zip



Vielen Dank.
In diesem VierGewinnt-Spiel wurde es so gelöst, dass ein extra Server gestartet wird. Somit ist es auch möglich, dass Spiel über einen externen Rechner zu hosten. Dabei besteht allerdings immer noch das Problem, dass ich die offenen Server in einem Netzwerk nicht finden kann. Bei dem VierGewinnt ist die INetAdresse standardmäßig auf localhost gestellt und man muss sie als Parameter manuell umstellen.

Gruß.


----------

