Sogar Spiele, die 100% Client / Server sind, haben manchmal Probleme, wenn sich der Client hinter NAT befindet. Peee-Peer-Spiele sind ein noch größeres Problem. Einige Spiele müssen mehrere Transporte (z. B. UDP und TCP) oder mehrere Verbindungen (z. B. einen anderen UDP-Port für Sprache) verwenden.
Wie kann sichergestellt werden, dass ein Spiel zuverlässig funktioniert, wenn es hinter einem NAT-Router ausgeführt wird?
- Peer-Peer: Es ist kein zentraler Server vorhanden. Spieler A startet ein Spiel und Spieler B möchte mitmachen
- Client-Server: Ein zentraler Server an einer bekannten Adresse (Hostname) akzeptiert alle eingehenden Verbindungen. Jeder Client kommuniziert nur mit diesem Server.
- Combo: Wo der Server nur Matchmaking betreibt, aber Spielaktualisierungen Peer-Peer sind. Unterschiedliche Peers können möglicherweise jeden Player mit einer anderen IP / einem anderen Port sehen (z. B. einige Clients befinden sich hinter demselben NAT und einige befinden sich auf einem anderen Router).
quelle
Lassen Sie den Server oder den Peer nicht von einem Client über seine eigene Adresse informieren. Mit anderen Worten, binden Sie die IP von Client A nicht in ein Spielpaket ein und lassen Sie Client B oder den Server auf diese Adresse antworten. Antworten Sie immer auf die Adresse / den Port, von dem die Nachricht stammt.
Minimieren Sie die verschiedenen UDP- oder TCP-Ports, die für das Spiel verwendet werden. Dies erleichtert das Einrichten von NAT-Regeln.
Ermöglichen Sie dem Benutzer, den im Spiel verwendeten Standardport zu überschreiben. Auf diese Weise können mehrere Server hinter demselben NAT gehostet werden.
quelle
Verwenden Sie neben anderen Antworten ein vorhandenes Rad: http://miniupnp.free.fr/ Diese Bibliothek bekämpft fast alle Störungen in Form von Funktionen und gibt Ihnen die Kontrolle darüber, wann und wie Sie schlagen und ziehen müssen :)
quelle