TCP Probleme

  • hi leute,

    ich bin gerade dabei mich etwas mit TCP vertraut zu machen. aber nun habe ich folgendes problem: ich habe jetzt einfach mal versucht nur eine verbindung zwischen server und client herzustellen. auf meinem pc klappt auch alles wenn ich als IP bei TCPConnect (client) und TCPListen (server) immer @IPAdress1 nehme. nun habe ich aber den client an einen freund gesendet und jetz klappt nichts mehr:( . nun wollte ich gerne wissen wo ich die richtigen IP's herbekomme damit es klappt.

    Server:

    Spoiler anzeigen
    [autoit]

    TCPStartup()

    [/autoit] [autoit][/autoit] [autoit]

    $MainSocket = TCPListen("???.???.???.???",20202)
    If $MainSocket = -1 Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    TrayTip("Server-Info","Server gestartet...",5)
    While 1
    $Connect = TCPAccept($MainSocket)
    If $Connect >= 0 Then
    MsgBox((0,"","Verbunden.")
    EndIf
    Sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Close()
    TCPCloseSocket($MainSocket)
    TCPShutdown()
    Exit
    EndFunc ;==>_Close

    [/autoit]

    Client:

    Spoiler anzeigen
    [autoit]

    TCPStartup()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(500)
    $Connect = TCPConnect("???.???.???.???",20202)
    If Not @error Then ExitLoop
    WEnd

    MsgBox(0,"","Verbunden.")

    [/autoit]

    EDIT: könnte mir vllt auch noch jemand erklären wie man portforwarding bei einer fritzbox macht? da ich keine ahung hab was UPnP ist. :(

    Einmal editiert, zuletzt von .::Mignon::. (17. Januar 2008 um 21:20)

  • Hi,

    Der Server (TCPListen) muss natürlich auf eine lokale IP Adresse hören, nehmen wir mal an, dass er nur eine Netzwerkkarte hat, dann kannst Du da einfach @IPAdress1 einsetzen.

    Beim Client sieht es anders aus. Da ich davon ausgehe, dass Du das Ding über das Internet betreiben möchtest, musst Du entweder die externe IP Deines Kumpels herausfinden oder er teilt sie Dir mit. Da der Code dann aber nutzlos ist (da der ISP beim Reconnect immer eine dynamische IP aus seinem Address-Pool vergibt) sollte sich Dein Kumpel sich bei einen dynamischen DNS-Dienst wie DynDNS.org anmelden, woraufhin man dann mittels seines Routers oder einer kleinen Software auf dem eigenen Rechner die externe IP durch Abgleich mittels z.B. heino.dyndns.org ansprechen kann.

    Dann musst Du noch darauf achten, dass Dein Port (20202) bei beiden Routern auf die korrekte lokale IP Adresse Eurer Rechner mittels Portforwarding erreichbar gemacht wird. Hab aber keine Ahnung, wie das bei einer FritzBOX geht. (Müsste auch dort NAT - Network Address Translation) heißen!

    • Offizieller Beitrag

    EDIT: könnte mir vllt auch noch jemand erklären wie man portforwarding bei einer fritzbox macht? da ich keine ahung hab was UPnP ist. :(

    Unter Einstellungen/Internet/Portfreigabe klickst Du auf 'Neue Portfreigabe', machst den Haken bei 'Portfreigabe für' und wählst dort 'Andere Anwendungen' aus.
    Bezeichnung: kannst Du Dir ausdenken.
    Protokoll: TCP
    von Port: 20202 bis Port:
    an IP-Adresse: Die lokale IP-Adresse Deines Rechner
    an Port: 20202

    Jetzt musst Du Deinem Gegenüber nur noch Deine Internet-IP-Adresse mitteilen (entweder per E-Mail, Telefon oder per Dyndns).

    Auf keinen Fall solltest Du UPnP aktivieren. Das ist ein großes Sicherheitsrisiko.

  • teh_hahn: ok thx ich werde es mal versuchen sobald ich das problem mit der portfreigabe gelöst hab ;)

    Oscar : also bei mir gibt es in der repubik internet keine portfreigabe. ich hab mich mal bei einem freund informiert der die selbe fritzbox hat und habe herausgefunden, dass man bei ihm protfreigabe machen kann o.O. nun frage ich mich wie das sein kann. kann es vllt damit zusammenhängen, dass ich meinen router zur zeit als modem benutze?

  • Richtig.
    Wenn du sie als Modem benutzt, kannst du die Router-Firewall mit Portfreigabe nicht vrwenden. Dann musst du die Ports nur an deinem Computer freigeben (Standard-XP-Firewall, ZoneAlarm...)

  • ok thx hätten wir das schon mal geklärt...aber ich hatte es gestern schon mal versucht mir freiem port in der windows firewall und es hat nicht geklappt.
    im server (läuft auf meinem rechner) hab ich die ip mit @IPAdress1 gesetzt im client hatte ich die ip mit _GetIP() ausgelesen und dann eingetragen. warum hat es denn da auch nicht gefunzt?

  • Also, wenn du die Box als Modem verwendest:
    Server: Listen auf _GetIP()
    Client: Connect auf _GetIP() vom Server

    Bei Router:
    Server: Listen auf @IPadress1 evtl auch 2,3 oder 4
    Router: Port-forward aif Server
    Client: Connect auf _GetIP() vom Server

  • ok erst mal danke für eure gute hilfe^^ hab mein modem inzwischen auf router umgestellt und werd es jetz wieder versuchen^^ wenn ich wieder probleme haben sollte poste ich wieder ;)