Programmierung der P2P-Anwendung
Schreibe ich eine benutzerdefinierte p2p-Programm läuft, dass auf port 4900. In einigen Fällen, wenn die person, die hinter einem router, dieser port nicht vom internet aus zugänglich.
Gibt es eine automatische Möglichkeit für den Zugriff auf den port aus dem internet. Ich bin nicht wirklich sicher, wie andere p2p-Anwendungen arbeiten.
Kann jemand bitte werfen etwas Licht auf das?
InformationsquelleAutor der Frage Jayesh | 2011-12-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
P2P-verbindungen in einer nussschale. Wir nehmen an, wir reden über UDP hier. Die nachfolgenden Schritte können auch angewandt werden, um TCP-allerdings mit einigen Anpassungen.
Aufzählen alle Ihre lokalen IP-Adressen (meist nur 1). Erstellen Sie einen UDP-socket auf einem bestimmten port-Nummer** für jeden adapter mit einer IP-Adresse.
Für jede Steckdose in Schritt 1 erstellt haben, Kontaktieren Sie einen STUN-oder TURN-server mit dem gleichen sockel zu entdecken, Ihre externe IP-Adresse und zu entdecken, was der interne port-Nummer, Karten außerhalb des NAT - (es sind nicht immer die gleichen port-Wert). Das ist deine lokale Adresse 192.168.1.2:4900 vielleicht 128.11.12.13:8888 für die Außenwelt. Und einige NATs nicht immer mit der gleichen port-mapping bei der Verwendung des gleichen Ports auf andere IP-Adressen. Auch bieten Sie eine "relay-Adresse". Sie können auch UPNP verwenden, um einen port-mapped-Adresse direkt von Ihrem router, wenn Sie unterstützt dieses Protokoll.
Durch ein rendezvous-service (SIP, XMPP, instant Messaging, web-service, E-Mail, Tassen mit Saiten), veröffentlichen Sie Ihre Adresse Kandidatenliste zu service oder senden Sie eine Benachrichtigung an den anderen client, der sagt, "hey, ich will mit Ihnen zu verbinden". Diese Nachricht enthält alle "Kandidaten Adresse" (ip-und port-Paare), die in den Schritten 1 und 2.
Dem remote-client nach dem Empfang der Verbindung einladen, führt Schritt 1 und 2 oben angegeben. Sendet anschließend seine Kandidaten-Liste durch den gleichen Kanal, die er erhielt, der /die einladende ist die Kandidaten-Liste auf.
Lochen Schritt. Beide clients starten senden von test-Nachrichten über UDP an die andere Seite, die die Adresse der Kandidaten und hören für die gleichen Nachrichten auf Ihr Ende. Wenn eine Nachrichten empfangen, Antworten auf die Adresse, von der es kam. Irgendwann, die Kunden entdecken, dass Sie haben ein paar Adressen, die Sie zuverlässig senden Datagramme zu. In der Regel ist ein Endpunkt macht die endgültige Entscheidung über die paar Adresse (sockets), miteinander zu kommunizieren und das Protokoll ermöglicht diesen Endpunkt erzählen den anderen Endpunkt dieser Entscheidung.
**- in der Regel am besten nicht zu verlassen Sie sich auf ein well known port für P2P-clients. Weil zwei clients hinter dem gleichen NAT-oder firewall würde wahrscheinlich nicht in der Lage sein, um Ihre software zu verwenden zur gleichen Zeit.
Hier ist eine kurze Zusammenfassung einiger Technologien zu erforschen.
BETÄUBEN - Ist eine einfache server-und Protokoll für clients hinter einer NAT/route zu entdecken, was Ihre externe IP-Adresse und port-mappings sind.
DREHEN ist eine Erweiterung zu BETÄUBEN, sondern unterstützt die Weiterleitung für P2P-Konnektivität Szenarien, in denen firewalls und NATs verhindern, dass direkte verbindungen.
EIS ist eine Reihe von Schritten, durch die STUN-und TURN sind für das einrichten einer P2P-Verbindung. EIS ist ein formales Protokoll für die Schritte 1-5 oben. Zwei ausgezeichnete Reihe von rutschen auf dem EIS sind hier und hier.
WebRTC ist eine Variante des ICE-Norm als auch eine Referenz-Bibliothek für stellen P2P-Sitzungen mit STUN und TURN.
UPNP + Internet Gateway Device Protokoll - Einige Router unterstützen diese für die hosts automatisch beziehen-port-Zuordnungen.
libnice ist ein open source C-Bibliothek für Linux (und möglicherweise auf windows) implementiert EIS.
libjingle ist ein EIS-Implementierung (in C++) von Google. Für Windows und Linux.
PJNATH ist eine Bibliothek innerhalb des PJSIP suite der Codierung Bibliotheken. Es ist eine gute Umsetzung des EISES stack (C-code) und wurde portiert, um eine Menge von Plattformen. (Windows, Linux, Mac, iOS, Symbian und bald auch Android).
Und endlich habe ich eine eklatante Stecker für Sie zu verwenden meine STUN-server code-Basis.
InformationsquelleAutor der Antwort selbie
Gibt es Lösungen, in einigen Fällen, siehe UPnP: https://en.wikipedia.org/wiki/Universal_Plug_and_Play#NAT_traversal
Mein Heim-router ermöglicht dieses, im Grunde, die NAT konfiguriert werden können, automatisch von der entsprechenden Anfrage aus dem computer.
Ich würde nicht zählen auf diese, um eine große Verbesserung in Ihrer Verfügbarkeit, weil es nicht, dass viele Router unterstützen das und haben es aktiviert.
EDIT: @David schlug vor, diese Frage ALSO für einen .NET-Bibliothek für UPnP: Gibt es eine UPnP-Bibliothek .NET (C# oder VB.NET)?
InformationsquelleAutor der Antwort jv42
Ich würde WebRTC - Technologie als open-source-framework für eine solche Anwendung.
Offizielle Website
In der Tat, es ist ein open-source-Projekt, welches unterstützt alle, die für peer-to-peer-Technologien aus der box:
InformationsquelleAutor der Antwort ankitr
Dies kann ein wenig komplizierter als das, was du suchst, aber TCP Hole Punching ist eine Technik, die funktionieren sollte. http://en.wikipedia.org/wiki/TCP_hole_punching
Alternativ UPnP funktioniert gut für Router /firewalls, die es unterstützen.
InformationsquelleAutor der Antwort Matthew
Haben Sie eine andere option, dass ist NAT Port Mapping Protocol (NAT-PMP)
NAT-PMP ist weithin von VoIP-Anwendungen wie Skype oder BitTorrent P2P-clients.
InformationsquelleAutor der Antwort loretoparisi