TCP Server kann Anfragen nicht verarbeiten

  • Hallo Leute,

    ich habe mal eine Frage an euch. Nachdem ich lange herumprobiert habe und auch viel gegoogelt und hier geguckt habe, komm ich leider alleine nicht mehr weiter ..

    Ich habe einen simplen TCP Server und Client. Die funktionieren auch soweit erstmal. Das Senden von Daten funktioniert auch, nur schaffe ich es nicht auf bestimmte gesendete Wörter zu reagieren.
    Hier mal der Quellcode:

    und hier der client:



    Wenn ich jetzt Daten sende, dann kommen die an (ich kann die zurück loopen und es kommt genau das wieder an was ich gesendet habe).
    Aber wenn ich jetzt einen Switch nach den gesendeten Wörtern mache, dann schafft er es nicht auf das Wort zu reagieren, obwohl es exakt so reinkommt wie ich es will .. Ich hoffe ihr versteht was ich meine :D
    (siehe Zeile 30)

    Da ich immer nur ein Wort bzw eine "Line" senden will, brauche ich die Daten die reinkommen nicht nach @crlf oder ähnlichem zu splitten ..

    Muss ich die empfangenen Daten noch irgendwie umformatieren oder so?

    Ich weiß echt nicht mehr weiter. Es wäre sehr nett wenn ihr mir da helfen könnten :)

    lg
    Leo.1906

  • Ich bezweifle das dein Serverskript funktioniert:

    Code
    >Running AU3Check (3.3.14.2)  from:C:\Program Files\AutoIt3  input:C:\Users\Bert\AutoIt3.My\Test\TCP-Server.au3
    "C:\Users\Bert\AutoIt3.My\Test\TCP-Server.au3"(5,42) : error: _resetConnection()(): undefined function.
    OnAutoItExitRegister("_resetConnection()")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Bert\AutoIt3.My\Test\TCP-Server.au3 - 1 error(s), 0 warning(s)


    wenn du dies so schreibst:

    Code
    OnAutoItExitRegister("_resetConnection")

    und Zeile 28 so:

    Code
    $pack = StringStripWS(TCPRecv ($ConnectedSocket, 2048),3)


    läuft es.

    Einmal editiert, zuletzt von autoBert (28. Februar 2016 um 16:33)

  • Da ich immer nur ein Wort bzw eine "Line" senden will, brauche ich die Daten die reinkommen nicht nach @crlf oder ähnlichem zu splitten ..

    Muss ich die empfangenen Daten noch irgendwie umformatieren oder so?

    Siehe Autoberts Antwort. Natürlich musst du den empfangenen String "test" & @CRLF vom @CRLF befreien bevor du auf einen String ohne Zeilenumbruch prüfst. Ansonsten wird er eben nicht gefunden, da er so nie an den Server verschickt wurde. Alternativ kannst du dein send im Client natürlich anpassen, wenn du ohnehin nur einzelne Zeilen versenden willst. Grundsätzlich ist ein Trennzeichen zwischen den Nachrichten aber sinnvoll, da bei schnellem Versand mehrere Nachrichten sonst als "einzelne" Nachricht ankommen könnten.

    Achja ein weiterer "Fehler"... dein Server Script führt beim Beenden kein TCPshutdown durch und auch der Mainsocket wird nicht geschlossen, bzw. deine Exitfunktion ruft wieder die waitforconn Funktion auf und somit kann das Script eigentlich garnie sauber beendet werden. Du solltest zusätzlich zur Resetcon Funktion noch eine echte Exitfunktion einbauen, damit alle Verbindungen sauber abgebaut und getrennt werden können. Andernfalls kann es dir unter Umständen passieren, dass dein Listening Socket blockiert bleibt und der Server irgendwann nicht mehr startet.

    3 Mal editiert, zuletzt von misterspeed (28. Februar 2016 um 16:50)