Seite 1 von 1

Netzwerk programmierung

Verfasst: 17.12.2010, 15:35
von DominicMoret
Hallo

Ich habe begonnen, netzwerk programme zu erstellen. Ich verwende C++ und enet. Das alles funktioniert auch schön, nur kann ich nicht jedem Computer Daten senden, aufgrund der Network Address Translation (NAT). Wie ist es möglich, z.B. ein kleines Chat-Programm zu erstellen, bei dem nur 2 Personen miteinander schreiben, aber jeder Computer kann mit jedem anderen sich verbinden. Das sollte ja wohl ohne einen Server funktionieren...? Ich habe schon von port-forwarding und nat-punchthrough gehört, weiss aber nicht wirklich was das ist bez. wie es funktioniert.

Kann mir jemand einige Informationen zu diesem Thema geben?
Vielen Dank

Re: Netzwerk programmierung

Verfasst: 17.12.2010, 16:38
von Chromanoid
DominicMoret hat geschrieben:aber jeder Computer kann mit jedem anderen sich verbinden. Das sollte ja wohl ohne einen Server funktionieren...? Ich habe schon von port-forwarding und nat-punchthrough gehört, weiss aber nicht wirklich was das ist bez. wie es funktioniert.
Mmh ich fürchte du wirst, wenn die Computer hinter Routern sitzen, i.d.R. immer einen Server brauchen, der als "Treffpunkt" für die beiden "Peers" funktioniert. Du könntest dir mal das STUN Protokoll anschauen. Und selbst mit einem STUN Server als Vermittler kann nicht immer eine P2P Verbindung aufgebaut werden. In so einem Fall muss dann wohl alles von einem öffentlich erreichbaren Server weitergeleitet werden.

EDIT: hier eine open source impl. des stun protokolls: http://sourceforge.net/projects/stun/

Re: Netzwerk programmierung

Verfasst: 17.12.2010, 18:29
von pUnkOuter
Ja, da wirst du nicht um einen Vermittler rumkommen. Ist ein gängiges Problem z.B. auch bei Strategiespielen, die meistens P2P Netzwerk einsetzen (weil man ja nicht will, dass wenn der Host geht, das Spiel für alle aus ist).

Re: Netzwerk programmierung

Verfasst: 17.12.2010, 18:51
von anonym
Hier ist ein Nat-Punchthrough-Algorithmus samt ein paar Informationen zu den Hintergründen beschrieben.