Testen von UDP auf den localhost
Ich bin versucht derzeit, eine online-video-Spiel, die derzeit verwendet den TCP-Pakete versenden. Ich möchte UDP verwenden, aber ich bin extrem neu für UDP-und ich habe einige Fragen.
Wenn ich zum testen meinen server/client(s) auf dem gleichen Rechner (localhost), die Pakete scheinen sich mit jeder anderen.
Zum Beispiel, wenn der client sendet ein packet an den server (UDP 127.0.0.1:1338), der Klient empfängt das Paket, da der client auch ist das hören für Pakete, die von 127.0.0.1 auf port 1338. Ebenso, wenn ich versuche, test 2 clients und 1 server, die clients senden Pakete, die bedeutet für den server, aber abgeholt werden die anderen Clients.
Wie kann ich testen, UDP auf den localhost, da alle Pakete werden empfangen wird oder gesendet, die auf 127.0.0.1:1338? Muss ich implementieren, irgendeine Art von Schicht, die in meine Pakete, die unterscheidet, ob das Paket für den server, oder an einem bestimmten client?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer zusätzlichen Schicht wird nicht helfen - da der server kann eigentlich nie Holen Sie sich das Paket.
Machen die ports auf der server-und client konfigurierbar. So könnte man verschiedene ports auf demselben Rechner zum testen und ändern Sie es beim gehen in die Produktion. Nur denken Sie daran, Sie müssen zum konfigurieren der ports in der client und server. Dies ist eine gute übung sowieso.
Du hast noch ein weiteres problem - von mehreren clients, die sich auf der gleichen Maschine und das hören auf den gleichen port. Sie können einen zufälligen port für jeden client (der client wählt einen zufälligen und benachrichtigt dann den server). Oder Sie können versuchen, die Bindung an verschiedene IP-Adressen (eine Adresse verwenden 127.0.0.1 einer anderen Verwendung die echte IP des PCs), aber es ist nicht erweiterbar.
Nur Ihre Server Abhören soll, auf den definierten port-Nummer (1338). Jeder Kunde sollte wählen Sie eine freie port-Nummer, und senden dem server dieser port-Nummer. Der server muss speichern Sie die client-Informationen und senden Sie dann die Pakete zu den Kunden in diesem client-Liste.
Sollten die clients auch über eine E-goodby Paket, wenn der client geschlossen wird, zu wissen, auf der Seite des Servers, die clients sind immer noch verfügbar sind und welche nicht teilnehmenden mehr.
Sollten Sie auch implementieren eine Art Hausmeister in diesem client-Liste. Zum Beispiel speichern Sie den Zeitstempel der letzten empfangenen Paket vom client und entfernen von clients, die noch nicht gesendete Daten für einige Zeit (Absturz client, Verbindung verloren ...) aus der Liste.
Wenn Sie gehen, um diese in einem LAN-setup, dann kann man immer filter das empfangene Paket auf der Basis der Adresse des Absenders -- recvmsg() der UDP ermöglicht das abrufen Absender-Adresse und port-Nummer. Wenn Sie gehen, um diese in einer WAN-setup, dann wäre wahrscheinlich nicht ein Problem sein, es sei denn, Sie versuchen zu tun multicast. Und selbst mit multicast, duplciate-Pakete werden nicht zurück gesendet an den Empfänger. Sie können IP_MULTICAST_LOOP um diese option zu deaktivieren.