TCP Schleife

  • Nachdem ein Client sich getrennt hat würde ich gerne dass das script sofort wieder auf eine neue verbindung wartet


    [autoit]

    #include <GUIConstantsEx.au3>
    Opt('MustDeclareVars', 1)
    ;==============================================
    ;==============================================
    ; SERVER!! Startet mich zuerst !!!!!!!!!!!!!!!
    ;==============================================
    ;==============================================
    Example()
    Func Example()
    ; Richte einige wiederverwendbare Informationen ein.
    ; Richte deine öffentliche IP Adresse (@IPAddress1) hier ein.
    ; Local $szServerPC = @ComputerName
    ; Local $szIPADDRESS = TCPNameToIP($szServerPC)
    Local $szIPADDRESS = @IPAddress1
    Local $MainSocket, $ConnectedSocket, $szIP_Accepted

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

    Local $nPORT = 33891

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

    Local $msg, $recv
    ; Startet den TCP Service
    ;==============================================
    TCPStartup()
    ; Erstellt einen lauschenden Port.
    ; Benutzt deine IP Adresse und den Port 33891. (Oben angegeben)
    ;==============================================
    $MainSocket = TCPListen($szIPADDRESS, $nPORT)
    ; Wenn die Socketerstellung fehl schlägt, dann wird das Programm beendet.
    If $MainSocket = -1 Then Exit

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

    ; Erstellt eine GUI für Messages.
    ;==============================================

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

    ; Initialisiert eine Variable um eine Verbindung anzugeben
    ;==============================================
    $ConnectedSocket = -1

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

    ; Wartet auf und akzeptiert eine Verbindung
    ;==============================================
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

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

    ; Bekommt die IP des verbundenen Clients
    $szIP_Accepted = SocketToIP($ConnectedSocket)
    ; GUI Message Schleife
    ;==============================================
    While 1
    $msg = GUIGetMsg()
    ; GUI beendet
    ;--------------------
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    ; Versucht Daten zu empfangen, bis zu 2048 bytes
    ;----------------------------------------------------------------
    $recv = TCPRecv($ConnectedSocket, 2048)
    ; Wenn der Empfang mit @error fehlschlägt, dann hat sich der Socket getrennt.
    ;----------------------------------------------------------------
    If @error Then ExitLoop
    ; Aktualisiert das Input-Control mit dem, was wir empfangen haben.
    ;----------------------------------------------------------------
    If $recv <> "" Then ConsoleWrite($recv & @CRLF)
    WEnd

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

    If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)
    TCPShutdown()
    EndFunc ;==>Example

    [/autoit]

    2 Mal editiert, zuletzt von Kizum (6. Oktober 2010 um 16:46)

  • Ich hab schon einiges versucht
    es beendet sich nachdem der client sich trennt....

    versuche seit 3 std ..von Au3 zu au3 hat es auch geklappt aber von c++ zu au3 klappts irgendwie nich...

  • Warum machst dann die Schleife nicht vor

    [autoit]

    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

    [/autoit]

    So wie du die Schleife hast kann keine neue Verbindung angenommen werden, dadruch ist $recv direkt ein @error weil nichts ankommt, die Schleife wird verlassen und das Script beendet sich.

    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.