2009-07-26 6 views
4

Dieses Thema this threaddirekte P2P-Verbindung

ähnelt Ich bin ziemlich neu in das Thema Netzwerkprogrammierung, nie aber auf einem einzigen lokalen Rechner mit TCP/UDP etwas getan hat. Jetzt entwickle ich eine Anwendung, die P2P-Netzwerkunterstützung benötigt. Genauer gesagt brauche ich die Anwendung, um über das Internet zu verbinden und zu kommunizieren, vorzugsweise ohne die Verwendung eines Servers, um das Matchmaking zwischen den Clients durchzuführen.

Ich bin mir bewusst und nehme an, dass fast alle Benutzer hinter einem Router sind, der den Prozess erschwert, da keiner der Clients in der Lage ist, eine direkte Verbindung zu dem anderen zu initialisieren.

Ich weiß, UPnP ist eine Option, um Portweiterleitung zu ermöglichen, ohne dass die Benutzer dies manuell konfigurieren, aber ab sofort ist dies keine Option. Können sie mein Ziel erreichen oder brauche ich diesen Server?

Antwort

5

Sie benötigen einen Server zum Austausch von IP-Adresse und so. Wie der andere Thread im wahrsten Sinne des Wortes hervorhebt, besteht die einzige Möglichkeit, eine Verbindung zu garantieren, darin, sich über einen Server zu verbinden. Die meisten Peer-to-Peer-Systeme verwenden UPnP und NAT Hole Punching (diese Methode benötigt einen Server Relais-Port-Informationen und funktioniert nur mit UDP), um eine Verbindung in den meisten Fällen herzustellen.

NAT Hole Punching funktioniert, wenn beide Clients eine Verbindung zu einem Server herstellen, dann versuchen beide, sich direkt mit einem Port zu verbinden, den der andere an den anderen weitergeleitet hat. Die meisten UDP-NATs merken sich die IP-Adresse und den Port für eine kurze Zeit. Obwohl die Daten nie an das andere Ende gelangten (nicht, dass dies bei UDP wichtig wäre), versucht der andere Client, sich einige Momente später als NAT mit dem Bericht zu verbinden würde die Antwort erwarten.

+0

Sie erwähnen, dass IPv6 das Problem der NAT vermeidet, bedeutet dies, dass wenn ich durch dieses Adressformat kann ich das ganze Problem der NAT vermeiden direkte Verbindungen zu blockieren? –

+0

Erfordert eine vollständig routingfähige IPv6-Adresse an beiden Enden. – ewanm89

2

Ignorieren UPnP (die leider nur mit einigen Routern funktioniert), und keinen zentralen Server, ich bin mir nicht sicher, ob es möglich wäre, eine direkte Verbindung zu erstellen, wenn beide Benutzer hinter einem NAT sind.

+0

Ich kenne die NET-Stanz/Loch-Technik, aber es erfordert einen Server. –

+0

Ich habe den Link in Ihrem Beitrag beim ersten Mal übersehen. Ohne einen zentralen Server (um die Verbindung auszuhandeln), glaube ich nicht, dass es möglich ist. – Kitsune

+1

In welcher traurigen Welt leben wir, wenn zwei Computer nicht direkt miteinander verbunden werden können, ohne speziell konfigurierte Hardware oder einen Mittelsmann zu haben, der ihnen hilft. –

3

Überprüfen Sie den P2P-Kanal mit WCF aus: http://msdn.microsoft.com/en-us/library/cc297274.aspx

Es funktioniert ganz gut.

+0

Und das funktioniert ohne einen Server und UPnP? –

+0

Ja. Es verwendet die Peer Naming Resolution und IPV6. – codekaizen

+0

IPv6 verwendet NAT im Grunde nicht, da es sowieso einen ausreichend großen Adressraum gibt. Aber die meisten ISPs unterstützen es noch nicht. Und Verbraucher-NAT benötigt aktualisierte Firmware, um nur IPv6-Verbindungen zu überbrücken. – ewanm89

1

Nun, um einen Server zu "matchmake" zu vermeiden, könnten Sie tun, was Skype tut und einige Peers als Relais für andere hinter NATs einrichten. Sie werden immer einen Boot-Strapping-Mechanismus benötigen, so dass ein zentralisierter Server wahrscheinlich irgendwie in Ihr System eingreifen wird (abhängig davon, was Sie entwickeln).