Suche P2P WinSock Tutorial



  • Wir sind Google! Selber anstrengen ist zwecklos! :p



  • Das ganze ist nun mal nicht so ganz einfach... :p

    Skype nutzt verschiedene Techniken um mit dem Firewall/NAT Probelm fertig zu werden... dazu bedarf es schon einiger Erklärung...
    Ganz kurz:
    1. Fall: Beide haben öffentliche IPs und sind nicht hinter NAT:

    If both users were on public IP addresses, online and were in the
    buddy list of each other, then upon pressing the call button, the
    caller SC established a TCP connection with the callee SC.

    2. Fall: Einer hat eine öffentliche IP und der zweite ist hinter NAT:

    the caller sent signaling information over TCP to an
    online Skype node which forwarded it to callee over TCP. This
    online node also routed voice packets from caller to callee over
    UDP and vice versa.

    3. Fall: Beide sind hinter NAT:

    both caller and callee SC exchanged signaling information over TCP with another online Skype node. Caller SC sent media over TCP to an online node, which forwarded it to callee SC over TCP and vice versa.



  • @Leser.
    Danke!

    @Jochen Kalmbach
    Okay, das ganze wird jetzt kompliziert, ich hatte mir das eigentlich viel eifnacher vorgestellt.

    Folgendes:
    http://www.gamedev.net/reference/articles/article1059.asp

    Da steht ganz am Anfang das Client - Client System, so wie ich mir das vortelle. Aber in dem Tutorial was dann folgt, wird nur das Client-Server System besprochen.
    Jetzt suche ich halt ein TUtorial für Winsocks mit dem Client-Client System und das NAT-Problem lass ich jetzt mal weg.

    mfg.



  • joomoo schrieb:

    Jetzt suche ich halt ein TUtorial für Winsocks mit dem Client-

    Wie "c.rackwitz" erklärt hat: Es gibt bei TCP kein "Client-Client" System!!! Einer muss der Server sein, der andere der Client!



  • Jochen Kalmbach schrieb:

    joomoo schrieb:

    Jetzt suche ich halt ein TUtorial für Winsocks mit dem Client-

    Wie "c.rackwitz" erklärt hat: Es gibt bei TCP kein "Client-Client" System!!! Einer muss der Server sein, der andere der Client!

    UNd wovon redet der Typ in dem Tutorial da?

    mfg.



  • joomoo schrieb:

    Jochen Kalmbach schrieb:

    joomoo schrieb:

    Jetzt suche ich halt ein TUtorial für Winsocks mit dem Client-

    Wie "c.rackwitz" erklärt hat: Es gibt bei TCP kein "Client-Client" System!!! Einer muss der Server sein, der andere der Client!

    UNd wovon redet der Typ in dem Tutorial da?

    Der versteht selber nicht was er schreibt... das was er als Client-Client beschreibt ist nichts anderes als:

    Client->Server
    Server<-Client



  • der redet davon, dass "client-client" auch nur client-server ist, aber beide clients gleichzeitig server sind.



  • Jochen Kalmbach schrieb:

    joomoo schrieb:

    Jochen Kalmbach schrieb:

    joomoo schrieb:

    Jetzt suche ich halt ein TUtorial für Winsocks mit dem Client-

    Wie "c.rackwitz" erklärt hat: Es gibt bei TCP kein "Client-Client" System!!! Einer muss der Server sein, der andere der Client!

    UNd wovon redet der Typ in dem Tutorial da?

    Der versteht selber nicht was er schreibt... das was er als Client-Client beschreibt ist nichts anderes als:

    Client->Server
    Server<-Client

    Aha. Und was sind verbindungslose/connectionless Sockets?

    mfg.



  • joomoo schrieb:

    Aha. Und was sind verbindungslose/connectionless Sockets?

    UDP



  • Jochen Kalmbach schrieb:

    joomoo schrieb:

    Aha. Und was sind verbindungslose/connectionless Sockets?

    UDP

    Okay danke.

    Jetzt meine Frage: Gibt es eine einfache Möglichkeit das Problem mit dem Umleiten beim öffnen eines Servers zu umgehen? Ich meine, mit dem Gedanke im hintergrund, einen externen server wie bei skype zu haben, der z.b. ip adressen etc austauschen kann.
    (ich dachte das würde mit peer-to-peer zu lösen sein)

    mfg.



  • peer-2-peer ist kein goettliches allheilmittel, das in allen erdenklichen formen erscheint und dich gluecklich macht.
    lies dir mal den wikipedia-artikel zu Kademlia durch, dann wirst du vielleicht verstehen.

    p2p sieht so aus:
    jeder peer ist von aussen erreichbar (also MUSST du den router perforieren).
    jeder peer hat die IPs und ports von einigen anderen peers.
    ein peer verbindet zu bekannten peers und tauscht peerlisten aus.

    die organisation von suchmustern etc bin ich zu faul dir zu reiterieren. -> kademlia



  • c.rackwitz schrieb:

    ein peer verbindet zu bekannten peers und tauscht peerlisten aus.

    Wenn er sich verbindet, dann muss also der andere Peer listen oder wie das heißt? Aber wie soll das gehen, wenn beide wegen des Routers das nicht können?

    mfg.

    edit: Hab's gerade kurz gelesen, die pdf datei, und jetzt hab ichs verstanden. okay, wie ich mir das vorgestellt hab geht wohl nicht, thread kann geschlossen werden.
    Danke an euch, vorallem für die pdf datei.



  • das einzige was ich dazu noch kenne ist der ansatz das man einfach nen port festlegt z.b. 13000 und dann alle ips diesen port abklappert und immer wenn ne verbindung zu standekommt überprüfst du ob es sich um dein programm handelt und danach kannstde loslegen problem dabei ist nur das es bei 2-10 nutzern zu lange dauert im netzwerk würde es vielleicht noch klappen da du ja dort den ip bereich auf deine subnetmaske einschränken könntest



  • Das ganze könnte man mit einem P2P Central Arbiter lösen. Hat im Endeffekt alle Eigenschaften von reinem P2P. Unterschied: Jeder neue Client muss sich an einer zentralen Stelle anmelden, welcher dann die aktuelle Peerliste verteilt.
    Davon abgesehen werden Statusupdates vom CA beobachtet und auf ihre Konsistenz überprüft. D.h., dass z.B. in einem Spiel unmögliche oder nicht zum Spiel gehörige Modifikationen (wie z.B. Ritter haut mit Schwert auf Wolf, der 10km entfernt ist und trifft, weil der Spieler seine Waffe "illegal" modifiziert hat) verhindert.

    Könnte man dann noch weiter spinnen zu einem P2P Multiple Central Arbiter etc. pp. aber das wäre glaube ich zu viel des Guten 😉


Anmelden zum Antworten