Problem mit TCP-Kommunikation zwischen zwei Rechnern im Internet

  • Tachchen,
    hab nen kleines Problem. Und zwar möchte ich, dass zwei Rechner übers Internet miteinander kommunizieren.
    Ziel ist es mit meinem Laptop meinem Desktop-PC Befehle zu schicken, wennich nich zu Hause bin.
    Hier mal die Sources:

    Client (für Desktop-PC)

    [autoit]

    #include<INet.au3>
    AutoItSetOption ( "TrayIconDebug" ,1 )
    TCPStartUp()
    $Port = 33891
    $myip=_GetIP()
    $packet = -1
    $MainSocket = TCPListen(@IPAddress1, 33891)
    $ConnectedSocket = TCPAccept($MainSocket)
    $Empfaenger_IP = TCPNameToIP("beliebigerserver.no-ip.biz") ;// no-ip ist ein Redirecter. Bei der Auflösung zu einer IP kommt also meine momentane IP vom Laptop.
    MsgBox(0,"",$Empfaenger_IP)

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

    $ConnectedSocket = TCPConnect($Empfaenger_IP, $Port)
    If $ConnectedSocket = -1 Then
    MsgBox(0,"Fehler!","Verbindung konnte nicht hergestellt werden...")
    Exit
    EndIf
    Sleep(1000)
    TCPSend($ConnectedSocket,"IP:"&$myip)
    Sleep(1000)
    TCPShutdown ()
    MsgBox(0,"","Erfolg!")

    [/autoit]

    Und hier der Source für den Server(Laptop):

    [autoit]

    TCPStartup()
    While 1
    $MainSocket = TCPListen(@IPAddress1, 33891)

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

    while 1
    $ConnectedSocket = TCPAccept($MainSocket)
    If $ConnectedSocket <> -1 Then ExitLoop
    Sleep(100)
    WEnd
    $happend=0
    Do ;// Start Daten werden Empfangen
    $recv = TCPRecv($ConnectedSocket, 2048)
    Sleep(100)
    ;// Ende Daten werden Empfangen
    ;// Start IP verarbeiten
    $strcontain=StringInStr($recv,"IP:")
    If $strcontain <>0 Then
    $ip=StringTrimLeft($recv,3)
    ConsoleWrite($ip&@CRLF)
    $happend=1
    EndIf
    ;// Ende IP verarbeiten
    Until $happend=1
    ConsoleWrite("IP empfangen!")
    $recv = TCPRecv($ConnectedSocket, 2048)
    ConsoleWrite($recv)
    sleep (100)
    WEnd

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

    TCPShutdown()

    [/autoit]


    Das Ding ist, dass wenn ich die beiden auf einem PC ausführe, Empfängt der Server die IP, wenn ich den Clienten jetz aber aufm Laptop ausführe und den Server auf dem Desktop, kann der Laptop keine Verbindung herstellen.
    Kann mir jemand helfen?

    Vielen dank :)

  • Was mir zuerst auffällt ist dass du im Client ein paar schritte hast die ich nicht nachvollziehen kann:


    [autoit]


    $MainSocket = TCPListen(@IPAddress1, 33891)
    $ConnectedSocket = TCPAccept($MainSocket)

    [/autoit]


    und kurz darauf:

    [autoit]


    $ConnectedSocket = TCPConnect($Empfaenger_IP, $Port)

    [/autoit]

    das obere kannst du ganz weglassen, falls du damit nichts anderes vorhast.

    Desweiteren brauch der Server deine Globale Ip wenn du es nicht im Lokalen Netzwerk machst.

    [autoit]


    $MainSocket = TCPListen(@IPAddress1, 33891);so nicht
    $MainSocket = TCPListen(_GetIP(), 33891)

    [/autoit]

    Einmal editiert, zuletzt von Zeitriss (28. Dezember 2010 um 02:20)

  • Hey,

    autoBert: Die Scripte in dem Thread hab ich mir angeguckt, runtergeladen und getestet. Selbes Problem wie bei meinen Programmen. Auf einem PC klappt das, jedoch aufgeteilt auf Laptop und Desktop funktioniert das ganze nicht.

    Zeitriss: Der Client soll ja gerade seine IP an den Server schicken, damit die kommunizieren können. Die No-IP-Software funktioniert auf dem Desktop nich. KP warum, aber das macht das ganze nur noch spannender :D

    Die von Andy erwähnten Scripte funktionieren nicht. Wenn ich dort meine Weiterleitungsseite, bzw. IP eintrage können die keine Verbindung aufbauen und mir wird WSA-Fehler 10060 angegeben.

  • Hi,

    Zitat

    Die von Andy erwähnten Scripte funktionieren nicht. Wenn ich dort meine Weiterleitungsseite, bzw. IP eintrage können die keine Verbindung aufbauen und mir wird WSA-Fehler 10060 angegeben.


    wenn die Scripte in der deutschen Hilfe seitdem nicht geändert wurden, funktionieren die Scripte einwandfrei!

    Zitat

    WSA-Fehler 10060

    ist ein timeout....

    Zitat

    Auf einem PC klappt das, jedoch aufgeteilt auf Laptop und Desktop funktioniert das ganze nicht.


    Wie jetzt, funktionieren die Scripte auf einem Rechner oder nicht? Scheinbar schon. Also liegts an etwas anderem.

    Sind Laptop und Rechner per Netzwerkkabel verbunden? Ohne weitere Informationen zu deiner Infrastruktur (Betriebssystem/Router/Netzwerk) kommen wir so nicht weiter.
    Ich gehe davon aus, dass sämtliche Firewalls ausgeschaltet sind, und sich die Rechner im selben Netzwerk befinden. Wenn der Laptop über wlan angebunden ist, kann es sein, dass der Router aus Sicherheitsgründen für wlan ein eigenes Netz verwendet, und dazwischen "routet". Dann müssen natürlich Serverdienste freigeschaltet werden!

  • Zitat:
    Desweiteren brauch der Server deine Globale Ip wenn du es nicht im Lokalen Netzwerk machst.

    [autoit]

    $MainSocket = TCPListen(@IPAddress1, 33891);so nicht
    $MainSocket = TCPListen(_GetIP(), 33891)

    [/autoit]

    Das ist Falsch.
    Ich selbst habe rumprobiert wie man über Internet richtig "hört".
    Man braucht ein Port-Forwarding auf dem Router sowie ein Listener auf @IPAddress1, NICHT auf die Globale IP!

  • @tkausl,
    das ist alles hier schon reichlich durchgekaut. Habs eben genau wie dort beschrieben durchgeführt, funktioniert einwandfrei.

    Das grösste Problem (wie meistens) ist imho, dass manche rennen wollen bevor sie laufen können! Wie kann/soll ich jemanden ernst nehmen, der eine Internetverbindung erstellen will, wenn nichtmal die SIMPELSTE Verbindung zwischen zwei Rechnern im internen Netz herstellbar ist?
    Aus welchem Grund habe ich dieses "Tutorial" denn geschrieben? Weil es absolut simpel nachzuvollziehen ist, und man, wenn man es genau wie beschrieben schrittweise abarbeitet, SOFORT merkt, wenn es klemmt!
    Also ich würde mir jedenfalls Gedanken machen, wie es sämtliche neuinstallierten Programme nach einem Mausklick schaffen, ungefragt auf irgendwelche Server im Internet zuzugreifen, aber ich es selbst nicht hinbekomme, auf meinen eigenenLaptop im Netzwerk zuzugreifen!?

  • Also, die Rechner befinden sich in einem Netzwerk, verbunden mit nem Router. Laptop geht übers W-Lan rein. Wenn ich server und client auf EINEM Rechner ausführe, also beide auf Rechner A, funktioniert alles problemlos, wenn ich jedoch Server auf Rechner A und Client auf Rechner B ausführe bekomm ich eben diesen WSA-Fehler.
    Firewall is ausgeschaltet und an den Scripten is nix verändert.

    Eigentlich will ich ja auch nich, dass sie übers Netzwerk kommunizieren, sondern übers Internet, aber wie Andy schon gesagt hat, man soll nich rennen bevor man laufen kann.

    Also nochmal zusammenfassend:
    Rechner sind in einem Netzwerk, Firewalls aus, unveränderte Scripte aus der Hilfe. Klappt aber nicht, bekomme immer ein Timeout.

    Könnts daran liegen, dass die Ports schon belegt sind oder so?
    Ich guck morgen mal, obs daran liegt. Möglicherweise ist es auch einfach der Router, der hat schon immer Schwierigkeiten gemacht.

    Danke erstmal für eure Hilfe. tut mir leid wenn ich dem ein oder anderen ein paar Nerven geraubt habe :D