TCP Server Problemchen

  • Hallo,

    habe mal wieder ein "Problem" und hoffe auf Hilfe :D . Mein "Server" tut eigentlich das was er machen soll. Man kann sich verbinden und er nimmt dann die Messages entgegen und wenn ich beende dann macht er das auch brav.

    ABER:

    Ich denke der Weg den ich gegangen bin mit DO und UNTIL ... bringt mich in eine Sackgasse. Hat sich der CLient einmal verbunden, kann man Aktionen ausführen. Man kann auch den Server beenden und er geht "aus". Verliere ich nun aber die Verbindung, steckt der Server ja in der Schleife bei Select fest. Zusätzlich das Problem: Man kann sich grundsätzlich nur einmal verbinden, für eine neue Verbindung muss der Server neugestartet werden.

    Nun habe ich schon probiert wie wild, aber irgendwie nicht den richtigen Weg gefunden. Nehme ich die DO UNTIL Geschichte raus, nimmt er die neuen Messages nicht entgegen, das klappt dann nur noch einmal.

    EDIT:

    Ich kann natürlich nach TCPShutdown() statt EXIT wieder ein RUN auf die Server.exe machen, das wäre sicher ein Workaround aber keine Lösung

    Spoiler anzeigen
    [autoit]


    ;TCP START
    TCPStartup()
    $Ip = @IPAddress1
    $Port = 5900
    $Incoming = TCPListen($Ip, $Port)
    ;------------------

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

    While 1
    Do
    $Con = TCPAccept($Incoming)
    ;ist wer da ?

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

    if $con >=0 then SplashTextOn("htXP Server", "Verbindung aufgebaut", 180, 30, 1, 0, 0)
    ;jau da ist einer !

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

    Until $con > 0
    $whatever = 1
    ;dummy

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

    Do
    $msg = TCPRecv($con, 5000)

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

    Select
    Case $msg = "aktiv"
    run("notepad.exe")
    Case $msg = "aus"
    ProcessClose("notepad.exe")
    Case $msg = "exit"
    MsgBox(4096,"","Verbindung wird abgebaut",2)
    MsgBox(4096,"","Server wird beendet",2)
    SplashOff()
    TCPShutdown()
    Exit

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

    EndSelect

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


    Until $whatever <> 1
    ;dummy

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

    WEnd
    ;aus die maus

    [/autoit]


    Edit GtaSpider: [17.04.2008 15:36]
    Spoiler Tags eingefügt
    Aufruf:

    Code
    [SPOILER][AUTOIT]
    AutoIt Code
    [/AUTOIT][/SPOILER]

    4 Mal editiert, zuletzt von JB72 (17. April 2008 um 15:46)

    • Offizieller Beitrag

    Hallo

    Ist jetzt nicht getestet, so sollte es aber funktionieren, hab es dir auch kommentiert:

    Spoiler anzeigen
    [autoit]

    ;TCP START
    TCPStartup()
    $Ip = @IPAddress1
    $Port = 5900
    $Incoming = TCPListen($Ip, $Port)

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

    Global $Con ;Für OnAutoItExit
    ;------------------

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

    While 1
    Do
    $Con = TCPAccept($Incoming)
    ;ist wer da ?

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

    If $Con >= 0 Then SplashTextOn("htXP Server", "Verbindung aufgebaut", 180, 30, 1, 0, 0)
    ;jau da ist einer !

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

    Until $Con > 0

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

    While 1
    $msg = TCPRecv($Con, 5000)
    If @error Then ExitLoop ; Wenn die Verbindung unterbrochen wurde, gibt TCPRecv ein error. Dann wird die DO Schleife Beendet.
    Select
    Case $msg = "aktiv"
    Run("notepad.exe")
    Case $msg = "aus"
    ProcessClose("notepad.exe")
    Case $msg = "exit"
    MsgBox(4096, "", "Verbindung wird abgebaut", 2)
    MsgBox(4096, "", "Server wird beendet", 2)
    SplashOff()
    ExitLoop
    EndSelect
    WEnd
    TCPCloseSocket($Con); Ist wahrscheinblich schon geschlossen, aber sicher is sicher ;)

    ;So und nun? Alles von Vorne... er wartet mit TCPAccept auf ein Client und wartet bis "aktiv" "aus" oder "exit" kommt.
    ;Das Script muss NIEEE wieder beendet werden ;)
    WEnd
    ;aus die maus

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

    ;OnAutoItExit = Wenn das Script beendet wird.
    Func OnAutoItExit()
    ;Nicht notwendig, aber schöner und kann unter umständen Probleme vorbeugen.
    TCPCloseSocket($Con)
    TCPShutdown()
    EndFunc ;==>OnAutoItExit

    [/autoit]

    Mfg Spider

  • Super vielen Dank. Werde ich mal austesten :rock:

    PS: Warst schneller wie meine PN :D ... Danke.