2012-04-08 6 views
0

Ich arbeite derzeit an einem Java-basierten Spiel, das ohne Server P2P gespielt werden kann. Bisher habe ich in der Lage, es zu bekommen arbeiten, wo eine Person die IP des anderen eintritt, die ich mit dem Anruf erhaltenWie kann ich ein P2P-Spiel erstellen, das netzwerkübergreifend funktioniert?

InetAddress.getLocalHost().getHostAddress()); 

Allerdings funktioniert dies nur, wenn zwei Computer im gleichen Netzwerk. Wie würde ich eine IP erhalten, die über Netzwerke funktioniert? Danke für Ihre Hilfe!

edit: Es ist ein 1v1 Spiel, so dass mehrere Verbindungen kein Problem sind. Und ich wollte, dass Benutzer IPs über Skype oder etwas schicken ... das ist nur etwas, das ich mit meinen Freunden verwenden möchte. Ex. Es zeigt die IP an, Sie senden es an Ihren Freund, er verbindet sich mit ihm.

Antwort

0

Diese Frage ist über die Suche nach der IP, die Sie wollen: How to get the ip of the computer on linux through Java?

Sie müssen auch eine Art von Port-Forwarding verwenden, um Computer in verschiedenen Netzwerken zu verbinden.

+0

Dies würde nicht funktionieren, da es keine Möglichkeit gibt, die Internet-Adresse zu erhalten, wenn Sie Ihre Pakete über ein Gateway wie ein Router oder Access Point senden. Sie würden dieselbe 10.0.0.something oder 192.0.0.irgendwo lokale IP-Adresse erhalten. Sie müssen auf einige Server zugreifen und lassen Sie Ihnen Ihre IP-Adresse sagen. –

1

Auch das torrent P2P-Netzwerk nutzt Server die IP-Adressen der Peers zu bestimmen. Nach dem Abrufen der IP-Adressen sind die Verbindungen natürlich zwischen Peers. Also schlage ich zumindest einen Web-Service vor, um die IP-Adressen von Peers aufzulisten. (Oder Sie können etwas wie listActivePeers.php/aspx/etc-Datei auf Ihre Website und ping für alle 5 Minuten und listet die IP-Adressen, die Ping-Befehl haben.)

Und ich möchte auch darauf hinweisen dass jeder Peer-Knoten eine Verbindung zu einer anderen öffnen muss, die nicht so effektiv ist, es sei denn, Sie haben ein paar Spieler. Wenn Sie 100 Online-Player haben, erhalten Sie 100 Verbindungen für jeden Peer und manchmal unterstützen einige Access Points oder Modems diese Art aktiver Verbindung nicht! Sie können stecken bleiben oder langsamer werden.

Darüber hinaus müssen Sie mit großer Menge an Concurrency Probleme behandeln. Stellen Sie sich vor, dass zwei Daten gleichzeitig an die beiden Peers gesendet wurden. Bevor Sie einen Zug machen, müssen sich die Kollegen gegenseitig überprüfen "Wenn ich diesen Zug machen kann? Oder sollte jemand von Ihnen einen Zug machen, sollte ich mir dessen bewusst sein?". Vor jeder Bewegung werden Sie also andere Peers sperren, indem Sie einige Informationen über die Verbindungen senden, die Sie zu ihnen haben, und jeder von ihnen wird dies tun, bevor er einen Zug macht.

aktualisieren (aus meinem Kommentar oben)
Überprüfen dieser Verbindung, um Ihre IP-Adresse fething. https://stackoverflow.com/a/2939223/1216609 auch Google für „Modem-Port öffnen oder nach vorne [Marke/Modell Ihres Access Point/Modem]“ Abfrage einen Port weiterzuleiten, die zu Ihrem Modem oder Router spezifisch ist.

+0

Es ist ein 1v1-Spiel, also mehrere Verbindungen sind kein Problem. Und ich wollte, dass Benutzer IPs über Skype oder etwas schicken ... das ist nur etwas, das ich mit meinen Freunden verwenden möchte. Ex. Es zeigt die IP an, Sie senden es an Ihren Freund, er verbindet sich mit ihm. – mattdee123

+0

Gut angezeigt IP und manuell zu senden ist die beste Lösung, wenn Sie nicht einmal einige Centalized Connection Listing-System verwenden, wie ich bereits erwähnt habe. Aber es ist wahrscheinlich, dass die Spieler Probleme haben, weil die meisten von uns hinter Router Firewalls heutzutage sind und sie brauchen den Port Ihr Spiel zu öffnen, oder Ihr Spiel kann UPnP verwenden, keine dauerhafte Lösung, aber besser als nichts. Der Spieler, der die IP gesendet hat, benötigt den Port des Spiels, auf den der Router zugreifen kann. –

+0

Ja, mein Problem ist, dass dieser Ansatz nur ein und dasselbe Netzwerk funktioniert. Die Adresse, die der Benutzer eingibt, ist wie "10.0.1.10" oder so. Wie würde ich dies über Netzwerke hinweg tun? Ich nehme an, ID benötigt eine andere IP-Adresse? – mattdee123

Verwandte Themen