Android-P2P (direkt-Verbindung) über das Internet (hinter NAT)
Ich Fang mit einem kleinen Projekt, im Grunde ein multiplayer (wie in mehr als zwei Spielern) Variante des klassischen Schlachtschiff-Spiel.
Einem problem, welches ich versuche zu beheben, bevor ich Tauchen Sie ein in die Codierung ist das problem der Kommunikation zwischen den verschiedenen Spielern. Eine aktuelle Möglichkeit ist die Verwendung einer zentralen HTTP-server als zentrale Drehscheibe für die Kommunikation (gekoppelt mit der Android-C2DM-API zu erlauben, push-Kommunikation vom HTTP-server an den Geräten). Dies scheint eine schöne Lösung, weil in der Theorie, solange Sie Zugang zum Internet haben, sollte es funktionieren perfekt, ob Sie sich hinter einem NAT oder nicht.
Jedoch die vorgeschlagene Lösung hat den Nachteil, dass vorhandene single point of failure,/extra load (webserver). So möchte ich versuchen, andere Optionen. Ich dachte, die direkte verbindungen über Sockets zwischen dem Kunden (mit dem webserver nur als eine erste Sitzung Punkt), dies würde jedoch nur dann gut funktionieren, wenn alle Geräte wurden im gleichen Netzwerk. Wenn man bedenkt, dass wir heute fast immer hinter dem NAT-router, wie kann ich erreichen, direkte Kommunikation? Ich habe das Lesen über lochen, aber ich kann nicht finden, eine gute Bibliothek, die ist gut dokumentiert (mit guten Beispielen) und das funktioniert auf Android, sicher. Auch die meisten (wenn nicht alle) hole-punching-Techniken (STUN, ICE, etc...) weithin verfügbar nur mit UDP, und das ist gut für audio - /video-und Echtzeit-multiplayer Spiele, kann verlieren einige Nachrichten, aber für ein multiplayer-turn-basiertes Spiel, ist es wichtig, zu garantieren, die Lieferung der Daten von jeder Runde (etwas, dass es nicht möglich direkt mit UDP).
Also irgendwelche Ideen, wie man eine zuverlässige Loch Stanzen (vorzugsweise über TCP) zwischen Android Geräten hinter NAT? Es müssen keine arbeiten auf 100% der Fälle (ein fremder NATs, möglicherweise nicht unterstützt werden), aber es wäre schön, wenn es funktioniert auf den meisten Fällen.
InformationsquelleAutor der Frage petersaints | 2012-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
nutzen xmpp über smack über gtalk. Sie müssen nicht sorgen zu machen über die server-und single-point-of-failure. lassen Sie google sorgen! Ich habe geschrieben Tetris zu machen, spielen Sie gegen zwei Spieler mit gtalk als Kommunikations-Ebene. http://code.google.com/p/tetrads-drop-lite/ Können Sie versuchen, MUC, wenn Sie möchten, dass mehr Spieler.
InformationsquelleAutor der Antwort Win Myo Htet
Bist du ziemlich viel gezwungen, um einen Vermittler. Sie können sich bis Natblaster für einen Mechanismus, der für die Einrichtung von TCP-verbindungen zwischen einigen Len Geräten, aber es ist nicht etwas, das Sie verwenden können, in Android, ohne verwurzelung beider Geräte. Und selbst dann ist es noch experimentell.
Die besten ist wahrscheinlich zu verwenden, eine vorhandene Föderierte messaging-system wie jabber.
InformationsquelleAutor der Antwort vipw
UDP nicht zuverlässig ist, die Lieferung aber man kann Sie verlässlich machen durch die Forderung, dass UDP-Pakete gesendet, erfordern Danksagung zurück. Dies, zusammen mit ein paar anderen Anforderungen, ist, was macht die zuverlässige TCP-over-IP (das ist unzuverlässig, um mit zu beginnen).
Als Hinweis, dies ist möglich, zu implementieren, aber wird wohl sehr zeitaufwändig sein, und die Kosten/nutzen-kann nicht in Ihrer situation.
InformationsquelleAutor der Antwort Jacob Zelek