2010-07-08 8 views
6

Ich versuche herauszufinden, wie man winSockets verwendet, um mein Spiel in ein LAN-spielbares Spiel zu verwandeln. Ich habe einige WinSockets-Dokumentation gelesen, aber ich kann nicht herausfinden, wie ein Client alle Spiele erhalten kann, die im LAN erstellt wurden.LAN-Spielserver mit Winsock scannen

Muss es versuchen, mit jeder IP im LAN zu verbinden, wie zum Beispiel versuchen, eine Verbindung zu 192.168.0.1, dann 192.168.0.2, etc? Gibt es einen besseren Weg?

+0

Check out http://en.wikipedia.org/wiki/Broadcast_address –

Antwort

2

Typischerweise ist dieser Spiele-Server den lokalen UDP-Broadcast verwendet werden, die etwas, das alle Kunden erhalten und so lange verarbeiten können, wie sie es hören. Hier

einig Beispiel-Client und Server-Code fand ich, dass Sie von Interesse sein könnte: http://visual-c.itags.org/visual-c-c++/29424/

0

Zunächst einmal, ich schlage vor, dass Sie wireshark für jede Netzwerk-Entwicklung zu bekommen. Es zeigt Ihnen, welches Paket durch den Draht geht. Es wird Ihnen erlauben zu sehen, wie andere Spiele es tun, da es viele Möglichkeiten gibt, dies zu tun.

Die UDP-Übertragung ist eine Möglichkeit, dies zu tun. Ändere einfach das letzte Byte der Ziel-IP auf 255 und du solltest in Ordnung sein.

+4

Blind ändern das letzte Byte wird nicht immer funktionieren. Dies hängt von der tatsächlichen Subnetzmaske ab, die im Netzwerk verwendet wird. Die richtige Methode zum Generieren einer Broadcast-Adresse besteht darin, die IP-Adresse des lokalen Computers zu übernehmen, sie mit der Subnetzmaske zu verknüpfen und dann mit der inversen Subnetzmaske ODER zu verknüpfen. Alternativ können Sie auch die globale Broadcast-Adresse 255.255.255.255 verwenden, aber nicht alle Firewalls/Router lassen dies zu. –

2

Ich denke, es gibt zwei Möglichkeiten, dies zu tun.

  1. Machen Sie eine "Lobby", mit der sich Clients und Server verbinden, damit sie sich gegenseitig finden können.

  2. Server senden UDP-Pakete. Clients hören zu und aktualisieren eine Liste von Servern.

Wenn Sie eine schnelle und einfache Art und Weise benötigen, würde die zweite Option groß sein, aber remeber meisten von UDP-Paketen werden verschwendet werden, da sie für jeden Kunden nur einmal verwendet werden.

Die erste Option ist eine allgemeinere und erweiterbare Lösung für dieses Problem. Es könnte jedoch mehr Zeit für das Design und die Implementierung benötigen.