TCP/IP Problem: Nach erfolgreicher Datenübergabe, Rückgabewert auslesen?

  • Hallo liebe Community ;)

    Nach einer langen Zeit muss ich selbst mal eine Frage stellen, anstatt mich durch die Suche zu klicken :D

    Folgendes Problem lässt sich einfach nicht lösen:

    Ich habe ein Web I/O Modul, das sich mit folgenden Befehlen über TCP ansprechen lässt:

    GET /inputX?PW=_mein_passwort_& -> schickt den Status des Inputs X zurück
    GET /outputX?PW=_mein_passwort_& -> schickt den Status des Outputs X zurück
    GET /outputaccessX?PW=_mein_passwort_&State=ON (OFF) -> setzt den Status des Outputs X auf ON (OFF) und gibt den Status zurück


    Das Schalten der Outputs funktioniert ohne Probleme, nur habe ich noch keine Möglichkeit gefunden die Rückmeldungen zu empfangen / auszuwerten.
    Hat von euch einer vielleicht eine Idee?
    Die zurückgelieferten Strings sind Null-terminiert, sollte das etwas damit zu tun haben^^

    Hier noch der derzeitige Quellcode:

    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>

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

    Dim $szIPADDRESS = @IPAddress1
    Dim $servIPAdress = "10.0.0.20"
    Dim $nPORT = "80"
    Dim $socket
    Dim $Adminpass= "admin"
    TCPStartup()
    $socket=TCPConnect($servIPAdress, $nPORT)
    if $socket = -1 Then Exit
    $OnorOFF= "OFF"

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

    MsgBox(1, "Connected", "Will now try to enable/disable some Outputs!", 10)

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

    for $i=0 to 11 Step 1

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

    $gesendeteBits = TCPSend($socket, "GET /outputaccess"& $i &"?PW=admin&State=" & $OnorOFF)
    OnlyMsgBox("Output: " & $i, $OnorOFF, 10000)

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

    Next

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

    TCPCloseSocket($socket)
    TCPShutdown()
    Exit

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

    func OnlyMsgBox($titel,$text,$sleeptime)
    $OnlyMsgBoxGUI = GUICreate($titel, 315, 131, 342, 189, BitOR($WS_MINIMIZEBOX,$WS_DLGFRAME,$WS_GROUP,$WS_CLIPSIBLINGS))
    $OnlyMSGBoxLabel = GUICtrlCreateLabel($text, 8, 24, 300, 81)
    GUISetState(@SW_SHOW)
    Sleep($sleeptime)
    GUiDelete($OnlyMsgBoxGUI)
    EndFunc ;==>OnlyMsgBox

    [/autoit]


    Hoffe es findet sich einer, der sich meiner erbarmt :rolleyes:


    lg feni

  • Moin

    Folgendes sollte funktionieren

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>

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

    Dim $szIPADDRESS = @IPAddress1
    Dim $servIPAdress = "10.0.0.20"
    Dim $nPORT = "80"
    Dim $socket
    Dim $Adminpass= "admin"
    Dim $OnorOFF= "OFF"
    Dim $iTimeout = 10 ;Timeout in Sekunden

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

    TCPStartup()
    $socket=TCPConnect($servIPAdress, $nPORT)
    if $socket = -1 Then Exit

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

    MsgBox(1, "Connected", "Will now try to get some Stats of Outputs", 10)

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

    for $i=0 to 11 Step 1

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

    TCPSend($socket, "GET /output"&$i&"?PW="&$Adminpass&"&")
    If Not @error Then
    $hTimer = TimerInit()
    $sState = ""

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

    Do
    $sState &= StringTrimLeft(TCPRecv($socket, 1, 1), 2)
    Until StringInStr($sState, StringTrimLeft(StringToBinary(@CRLF & @CRLF), 2)) Or (TimerDiff($hTimer) > $iTimeout*1000)

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

    If $sState <> "" Then
    MsgBox(0,"Output "&$i,"State: "&$sState)
    Else
    MsgBox(0,"Error","Nichts empfangen")
    EndIf
    EndIf

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

    Next

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

    TCPCloseSocket($socket)
    TCPShutdown()
    Exit

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