TCPSend sendet nicht und TCPRecv blockiert den Server

  • Hi,

    ich versuche gerade via Autoit und TCP mit einem php-socket-Server zu Kommunizieren. Über Kommandozeile via Telnet funktioniert von dem Rechner auf dem das Autoitscript getestet wird alles Problemlos. Beim Autoitscript gibt es nun zwei Probleme.

    1. Bei TCPSend kommt nichts beim Server an. Laut Funktionsrückgabe von TCPSend und @error wurden die Daten aber gesendet.
    2. So lange die zweite TCPRecv Schleife läuft, die keine Antwort bekommt da das TCPSend nicht am Server ankommt (die erste TCPRecv-Schleife funktioniert deshalb weil beim Verbinden mit TCPConnect bereits eine Nachricht vom Server gesendet wird, welche auch richtig bei Autoit ankommt), wird der Server scheinbar so mit anfragen bombardiert das selbst ein Zugriff via telnet nicht mehr möglich ist (wenn Autoit nicht läuft ist der Zugriff auch von mehreren Telnet-Clients aus möglich)

    Hier nun das Script, hoffentlich hat jemand eine Idee:

    Spoiler anzeigen
    [autoit]

    #include<Constants.au3>

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

    Example()

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

    Func Example()
    TCPStartup()

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

    OnAutoItExitRegister("OnAutoItExit")

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

    Local $sIPAddress = "127.0.0.1"
    Local $iPort = 33379

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

    Local $iSocket = TCPConnect($sIPAddress, $iPort)
    Local $iError = 0

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

    If @error Then
    $iError = @error
    MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Client:" & @CRLF & "Could not connect, Error code: " & $iError)
    Return False
    EndIf

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

    Do
    $bData = TCPRecv($iSocket, 1024)
    ConsoleWrite($bData)
    Until $bData <> ""

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

    $erg = TCPSend($iSocket, "123")

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

    Do
    $bData = TCPRecv($iSocket, 1024)
    ConsoleWrite($bData)
    Until $bData <> ""

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

    TCPCloseSocket($iSocket)
    EndFunc ;==>Example

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

    Func OnAutoItExit()
    TCPShutdown()
    EndFunc ;==>OnAutoItExit

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    2 Mal editiert, zuletzt von chip (14. Januar 2015 um 16:43)

  • als ip adresse musst du eventuell @IPAdress1 nehmen.
    Du solltest wenn möglich anders überprüfen ob TCPRecv etwas empfangen hat. Bei http packeten gibt es ja auch eine vernünftiges ende mit dem doppelten CRLF.
    Du könntest auch schauen ob der socket noch aktiv ist(@error) oder lässt einfach einen timeout abwarten

  • Hi, danke aber der Thread stand bereits auf "gelöst" ;). Problem war schlicht ein fehlendes @LF beim TCPSend.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.