Anfrage und Rückgabe eine Wertes mittels TCP

  • Hey Leute,
    mein chat ist fast fertig,
    Ich will jetzt den gesamten Verlauf vom Server anfordern.
    Entschieden hab ich mich das ich mittels der Funktion "AdlibRegister" alle 3sec dem Server die Nachricht "#####" sende.(funktioniert ohne Probleme).
    meine Probleme befinden sich momentan beim Server:

    Er soll wie schon gesagt die Nachricht "#####" erkennen, die Client_IP aus der Verbindung ermitteln und an diese zurücksenden.

    so müsste es ja eigentlich ganz grob funktionieren, tuts aber nicht -.-'

    [autoit]

    TCPStartup()
    while 1
    $srvSocket = TCPListen($Server_IP_IP,$Server_Port_IN) ;empfangen
    $ConnectedSocket_Send = TCPConnect($Client_IP, $Client_Port_IN);senden

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

    $con = TCPAccept($srvSocket)
    If $con >= 0 Then
    $rec = ""
    $Senden_an_Client_nach_Anfrage = $Verlauf_gesamt ;
    While True
    $rec &= TCPRecv($con,$max_Anzahl_Zeichen)
    WEnd

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

    if ($rec <> "#####") then ;hier die eigentliche Auswertung
    TCPSend($ConnectedSocket_Send,$Senden_an_Client_nach_Anfrage)
    TCPCloseSocket($ConnectedSocket_Send)
    EndIf

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

    EndIf

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

    GUICtrlSetData($Edit1,$rec) ;Schreiben des Verlaufs in die Editbox

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

    WEnd

    [/autoit]

    (paar Variablen innerhalb des Scripts sind in meinem deffiniert, hab den Script nur zusammengeschrieben mits kürzer ist und von der Logik einfach zu verstehen^^)

    hat jemand irgend einen Vorschlag?(:

    Einmal editiert, zuletzt von TimoIt (2. August 2011 um 19:11)

  • Also...
    1) Dein TCPConnect ist nicht nötig, da der Client sowieso zum Server connected (und nicht umgekehrt).
    Da bei dem Client kein Server läuft, müsste das sowieso schief gehen.
    2) Hier mal mein Vorschlag:

    [autoit]

    TCPStartup()
    $Server = TCPListen($IPAddr, $Port)
    ;...
    $Client = -1

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

    While 1
    If $Client > 0 Then
    $Recv = TCPRecv($Client, 4096)
    If $Recv = '#####' Then
    TCPSend($Client, GUICtrlRead($Edit1))
    Else
    GUICtrlSetData($Edit1, $Recv & @CRLF, 'append')
    EndIf
    Else
    $Client = TCPAccept($Server)
    EndIf
    ;...
    WEnd
    TCPCloseSocket($Client)
    TCPCloseSocket($Server)
    TCPShutdown()

    [/autoit]


    So wird das, was der Client schickt, zu dem Edit-Control hinzugefügt, und wenn der Client '#####' schickt, wird der Inhalt von dem Edit-Control zurückgeschickt.
    Ich hoffe das war hilfreich.