TCP Verbindung VMWare

  • Hallo Autoit Forum,

    ich habe eine Frage bezüglich der Verwendung einer VM als Server.

    MEIN PC --> Windows 7 --> Client
    MEIN PC --> Windows 7 --> VM --> Windows 7 --> Server

    Ich habe das problem das wenn ich mein client Skript ausführe
    die Anfrage nicht am server ankommt. Kann mir da vll. jemand
    helfen.

    Client:

    $ip = 'IP Adresse vom in VM laufendem Windows 7'
    TCPStartUp()

    Do
    $TCPConnect = TCPConnect($ip,45670)
    If @error Then
    MsgBox(64,"Error!","konnte nicht verbinden :")
    EndIf
    Until $TCPConnect <> -1

    $TCPSend = TCPSend($TCPConnect,"First text on moon")

    TCPShutdown()

    Server:

    $ip = 'IP Adresse vom in VM laufendem Windows 7'
    TCPStartUp()

    $MainSocket = TCPListen($ip, 45670, 100 )

    while 1
    $TCPAccept = TCPAccept($MainSocket)
    If @error then
    MsgBox(64,"Error","error")
    EndIf
    WEnd

    $TCPRecv = TCPRecv($TCPAccept,2048)

    If $TCPRecv <> "" Then
    MsgBox(0,"Info","Text erhalten :" & $TCPRecv)
    EndIf


    TCPShutdown()

    Schonmal Danke ;)

    Einmal editiert, zuletzt von whoami (17. September 2014 um 08:58)

  • Du gehst im Server in eine While-Schleife.

    [autoit]

    while 1

    [/autoit]


    1 heißt so viel wie true. Die Schleiße ist somit endlos, bis sie mit ExitLoop verlassen wird.
    Du akzeptierst mit TcpAccept die Verbindung, du bleibst aber in der Schleife, sodass du im Prinzip nach weiteren Clienten suchst.
    Du kommst somit nie zum

    [autoit]

    $TCPRecv = TCPRecv($TCPAccept,204)

    [/autoit]

    Hinzu kommt noch, dass das TCPRecv nur einmal aufgerufen wird. Somit bekommst du einen leeren String (wegen der Verzögerung beim senden, da der Client nicht im selben Moment senden wird, in dem du dort ankommst. Daher muss es in eine Schleife gepackt werden, welche unterbrochen wird, sobald ein Text gesendet wurde.

    So müsste es richtig aussehen:

    Spoiler anzeigen
    [autoit]

    $ip = 'IP Adresse vom in VM laufendem Windows 7'
    TCPStartUp()

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

    $MainSocket = TCPListen($ip, 45670, 100 )

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

    $TCPAccept=0
    while $TCPAccept=0 and sleep(100)
    $TCPAccept = TCPAccept($MainSocket)
    If @error then
    MsgBox(64,"Error","error")
    EndIf
    WEnd
    msgbox(48,"Info","Client verbunden. Es wird auf den Text gewartet!")
    while sleep(100)
    $TCPRecv = TCPRecv($TCPAccept,204)
    if $TCPRecv<>"" then
    MsgBox(0,"Info","Text erhalten :" & $TCPRecv)
    ExitLoop
    endif
    WEnd

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

    TCPShutdown()
    msgbox(48,"Info","Server beendet")
    exit

    [/autoit]

    Als Tipp:
    Quelltext bitte in autoit Codes setzen (der Button mit dem AutoIt Logo)
    Bei größeren Scripten zusätzlich noch in einen spoiler. (der SP-Button)