Problem bei TCP

  • Hey Leute ich schreib momentan ein chat, Problem: Vom Client zum Server zu senden Funktioniert, Anderstrum allerdings nicht.
    Ich poste einfach mal Auszüge aus meinem Script:


    CLIENT

    [autoit]

    Func _Send ()
    $msg = GUICtrlRead($Input_msg) ;Nachricht aus inputbox auslesen
    GUICtrlSetData($Input_msg,"") ;Werte in inputbox löschen
    $msg_mit_username = $User_Name & @CRLF & $msg;Nachricht bilden aus Username, Eingabe und Nachricht
    $ConnectedSocket_Send = TCPConnect($Server_IP, $Port_OUT);Verbindung zum Server herstellen
    If $ConnectedSocket_Send = -1 Then;Wenn Verbindung nicht hergestellt werden kann, Erscheint eine Fehlermeldung
    MsgBox(16, "Client - Warning", "Message failed")
    EndIf
    TCPSend($ConnectedSocket_Send,$msg_mit_username);Nachricht $msg wird auf die aufgebaute Verbindung $connectedSocket gesendet
    TCPCloseSocket($ConnectedSocket_Send);Verbindung wird wieder geschlossen.
    EndFunc

    [/autoit]


    SERVER

    [autoit]


    $socket = TCPListen($Server_IP,$Port_IN);Listening Port
    ...
    $con = TCPAccept($socket)
    If $con >= 0 Then
    $rec = ""
    While True
    $rec &= TCPRecv($con,2048)
    If @error Then ExitLoop
    WEnd
    ;------------------------------------------
    $msg_gesamt = $msg_gesamt & @CRLF & $rec & @CRLF ;Empfangene Nachricht mit Verlauf verknüpfen
    GUICtrlSetData($Verlauf,$msg_gesamt) ;gesamter Verlauf wird in das Editfeld geschrieben

    [/autoit]

    Eigentlich müsste ich ja damit ich von Server zum Client den Verlauf übermitteln kann, einfach nur beide Func's austauschen oder?
    tut dann aber nicht. HILFE!

    2 Mal editiert, zuletzt von TimoIt (27. Juli 2011 um 20:24)

  • Naja so wie du es jetzt hast kannst du keine Antwort vom Server erhalten. Im client stellst du zunächst die Verbindung zum Server her, dann sendest du etwas und danach beendest du sofort die Verbindung mit close socket. Der Server kann dir dann auch nix mehr schicken, sollte ja logisch sein. Der Server kann von sich aus auch keine Verbindung mit dir herstellen, schliesslich hast du einen Client und bist selbst kein Server. Du musst die Verbindung im Client also mindestens solange aufrecht erhalten, bis dass du eine Antwort vom Server erhalten hast. Das bedeutet du musst im client nach dem senden noch eine Schleife mit tcprecv laufen lassen und erst danach die Verbindung mit close socket trennen.

    Nun zum Server Teil. Da musst du die empfangenen Nahcrichten auswerten und dann entsprechend mit tcpsend an den verbundenen Client, also $con deine Antwort verschicken.

  • ich hab nen bisschen auf youtube rumgeschaut und hab ne lösung gefunden und es tut auch(:
    bis jetzt tuts und wird um Zusatzfunktionen erweitert^^

    Danke für die Mühe was du dir gemacht hast :)