TCP funktion

  • Hallo zusammen.
    Ich wollte ein wenig mit TCP programmen herumprobieren, bin allerdings nicht weit gekommen.
    Habe einen Server + Clienten geschrieben.
    Mit dem Client will ich dem Server Nachrichten schicken.
    Das klappt sogar, jedoch nur wenn ich den Client mit meiner Festen/Netzwerk IP füttere.
    Sobald ich die Internet IP (keine ahnung wie die beiden heißen, aber ihr wisst was ich meine) benutze, funktioniert es nicht mehr.

    Es kann denke ich nicht an meiner Firewall liegen, denn verbinden tun die beiden sich noch. Es kommen nur keine Nachrichten mehr beim Server an...

    Wüsste wirklich gerne wo mein Fehler liegt.
    Habe schon viel ausprobiert und weiß nicht mehr weiter.

    Hier die beiden Scripts:

    Client:

    [autoit]

    #include <GUIConstantsEx.au3>

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

    TCPStartup()
    $ip = TCPNameToIP ("mabbi.dnsuser.de")
    $verbindungszeit = 0

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

    While 1
    ToolTip ("Verbinden",1,1)
    Sleep(500)
    $Socket = TCPConnect($IP, 65432)
    If Not @error Then ExitLoop
    $verbindungszeit = $verbindungszeit +1
    If $verbindungszeit = 40 Then
    MsgBox (0,"Fehler","Fehler beim Verbinden mit dem Server.")
    Run ("MTC.exe")
    Exit
    EndIf
    WEnd

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

    ToolTip ("Bereit Client",1,1)

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

    While 1
    $inutbox2 = InputBox ("Hallo","hallo")
    TCPSend ($Socket,$inutbox2)
    WEnd

    [/autoit]

    Server:

    [autoit]

    $IP = "192.168.0.100"
    $sock = 0

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

    TCPStartup ()
    $tcplisten = TCPListen ($IP,65432,100)

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

    Do
    $sock = TCPAccept($TcpListen)
    Until $sock <> -1

    ToolTip ("Bereit Server",1,40)

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

    While 1
    $1 = TCPRecv ($sock,4000)
    If $1 = 1 Then
    Exit
    EndIf
    WEnd

    [/autoit]
  • Edit Sorry: Verlesen.

    Zitat

    denn verbinden tun die beiden sich noch


    nicht gesehn ;)

    [autoit]

    While 1
    $1 = TCPRecv ($sock,4000)
    If $1 = 1 Then
    Exit
    EndIf
    WEnd

    [/autoit]

    $1 Kommt als String an !
    Und ein String wird im Vergleich mit einer Zahl immer als 0 gewertet.
    Frag doch so

    [autoit]

    While 1
    $1 = TCPRecv ($sock,4000)
    If $1 <> '' Then
    MsgBox( 0, 'Ausgabe:', $1 )
    Exit
    EndIf
    WEnd

    [/autoit]

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Es kann aber schon an der Firewall oder am Router liegen. Es muß der Port 65432 freigegebe sein. Sonst funktioniert das net.
    Teste es mal bei Windows geht das in den Firewalleinstellugen und im Router unter dem Stichpunkt Sicherheit.
    Ich kenne das von der Fritzbox.

    EDIT:
    ich habe es auch gerade gelesen, aber bist du dir wirklich sicher das die Verbindung funktioniert? Weil wenn das der Fall wäre müsste auch eine Nachricht durchkommen.

    MfG
    Der_Doc

    Einmal editiert, zuletzt von Der_Doc (24. April 2009 um 18:31)

  • limette, deine Version habe ich soeben ausprobiert.
    Funktioniert auch nicht...

    Ich glaube nicht, dass sie sich verbinden würden ohne dass alle ports offen sind.
    Eine idee habe ich noch, verstehe sie aber nicht^^

    In diesem Thread wird ein TCP chat präsentiert.
    In der quelldatei sieht man, dass die ein und ausgehenden daten codiert werden.
    Wie genau verstehe ich auch nicht:

    [autoit]

    Func _PrivateMessage($user, $str, $from)
    ; Sendet eine PM zu den angegebenden User
    For $i = 0 To $index
    If $conuser[$i][1] = $user Then
    TCPSend($conuser[$i][0], _RSA_Encrypt("~ " & $from & Chr(2) & $str, $conuser[$i][2]))
    Return 1
    EndIf
    Next
    Return 0
    EndFunc ;==>_PrivateMessage

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

    Func _RSA_Encrypt($sText, $iSerial, $sKeyFileName = "")
    Local $sBuf, $iLen, $sEnc
    If $sKeyFileName = "" Then $sKeyFileName = @ScriptDir & "\global\" & $iSerial
    $sKeyFileName = StringReplace($sKeyFileName, "\", "\\")
    $sBuf = RSA_Encrypt ($sText, $sKeyFileName & ".pubkey")
    Return $sBuf
    EndFunc ;==>_RSA_Encrypt

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

    Func _RSA_Decrypt($sEncText, $sKeyFileName = "")
    Local $sBuf, $iLen, $sDec, $sSs
    $sKeyFileName &= @ScriptDir & "\global\Server"
    $sKeyFileName = StringReplace($sKeyFileName, "\", "\\")

    $sBuf = RSA_Decrypt ($sEncText, $sKeyFileName & ".privkey")
    Return $sBuf
    EndFunc ;==>_RSA_Decrypt

    [/autoit]

    Einmal editiert, zuletzt von MAB_Commander (24. April 2009 um 18:39)

  • Bist du sicher, dass der TCPConnect noch funzt ?

    Prüf doch mal die TCPSend & TCPRecv auf @error..
    Ansonsten wüsste ich auch grad nicht weiter... :pinch:

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Was soll an dem TCPConnect nicht funktionieren?
    Beide Programme laufen bis zu den Tooltips (Bereit)

    Habe auf errors überprüft, und zwar so:

    [autoit]

    While 1
    $1 = TCPRecv ($sock,4000)
    If @error Then
    MsgBox (0,"Error","error")
    EndIf
    If $1 <> '' Then
    MsgBox( 0, 'Ausgabe:', $1 )
    Exit
    EndIf
    WEnd

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

    While 1
    $inutbox2 = InputBox ("Hallo","hallo")
    TCPSend ($Socket,$inutbox2)
    If @error Then
    MsgBox (0,"Error","error")
    EndIf
    WEnd

    [/autoit]

    Hoffe das war richtig so.
    Jedenfalls wurde kein error angezeigt.

  • Klappt auch nicht...
    Kann das script vllt mal jemand bei sich ausprobieren?
    Vllt liegt es ja doch an meinem pc.

  • Habe was neues:
    Anfangs passiert einfach nichts, wenn ich daten an den Server sende, und nachdem die beiden Programme ein paar minuten an waren, und ich es nochmal versucht habe, kommt jetzt nach jedem senden eine Fehlermeldung vom Client:
    @error ist 10053, bedeutet: Verbindung durch TCP/IP abgebrochen

    Was bedeutet das, und warum ist das so?

    Das sind doch 2 sehr einfache programme, warum weiß niemand was falsch ist?