TCP Wert kommt nicht an

  • Hi Leute,
    ich habe mal vorgehabt einen kleinen IM zu schreiben und habe grade eben angefangen. Dazu habe ich auch andere Scripts, Posts, etc. angeguckt. Jetzt ist trotzdem noch etwas komisch.
    Das hier ist mein "Client":

    [autoit]

    TCPStartup()

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

    $EIP = InputBox("IP", "Empfänger IP eingeben:")
    $Connect = TCPConnect($EIP, 6221)

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

    $MSG1 = InputBox("Senden", "Sende:")
    TCPSend($EIP, $MSG1)

    [/autoit]


    Und das hier mein "Server":

    [autoit]

    $MIP = @IPAddress1

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

    TCPStartup()
    $MSocket = TCPListen($MIP, 6221, 1024)
    If $MSocket = -1 Then
    MsgBox(0, "Error", "Mainsocket = -1")
    EndIf

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

    While 1
    $SMsg = TCPAccept($Msocket)
    If $SMsg >= 0 Then
    MsgBox(0, "Connected",$SMsg)
    $Msg = TCPRecv($Msocket, 1024)
    ; GUICtrlCreateLabel($Msg, 100, 150)
    MsgBox(0, "Messege", $Msg)
    EndIf
    $Msg = TCPRecv($Msocket, 1024)
    If $Msg Not = "" Then
    MsgBox(0, "Messege", $Msg)
    EndIf
    WEnd

    [/autoit]


    Das Problem ist, dass ich zwar eingezeigt bekomme das mein Freund sich Connected hat, aber immer wenn er was schreibt erhalte ich eine leere Nachricht :(
    Aquaplant

    Einmal editiert, zuletzt von Aquaplant (14. November 2009 um 19:24)

  • Ich liste einfach kurz die funktionierenden Quellcodes:
    Hier der Client:

    [autoit]

    $EIP = InputBox("IP", "Empfänger IP eingeben:")
    TCPStartup()
    $Connect = TCPConnect($EIP, 6221)
    $MSG1 = InputBox("Senden", "Sende:")
    TCPSend($Connect, $MSG1)

    [/autoit]


    Und hier der Server:

    [autoit]

    $MIP = @IPAddress1

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

    ;~ Eingehende IP erhalten (siehe auch Hilfe)
    Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet

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

    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")

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

    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf

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

    $sockaddr = 0

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

    Return $aRet
    EndFunc

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

    TCPStartup()
    $MSocket = TCPListen($MIP, 6221, 9999)
    If $MSocket = -1 Then
    MsgBox(0, "Error", "Mainsocket = -1")
    EndIf

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

    While 1
    $SMsg = TCPAccept($Msocket)
    $eingehendeIP = SockettoIP($SMsg)
    If $SMsg <> -1 Then
    ; MsgBox(0, "Connected",$SMsg)
    $check = 0
    While $Check = 0
    $Msg = TCPRecv($SMsg, 9999)
    If $Msg <> "" Then
    MsgBox(0, "Message", $Msg)
    $Check = 1
    EndIf
    WEnd
    ; MsgBox(0, "Eingehende IP", $eingehendeIP)
    EndIf
    WEnd

    [/autoit]


    Das Hauptproblem war einfach nur, dass der Server nicht auf die eingehende Nachricht gewartet hat.