EasyTcp UDF (Einfache? Netzwerkkommunkation)

  • Hallo Autoit Community!


    Hier möchte ich mal ein von mir rohes Projekt vorstellen, mit welchem ich versuchen möchte die Netzwerk-Kommunikation in Autoit Programmen vereinfachen.

    Genannt habe ich das ganze einfach mal EasyTcp (Hauptsächlich um mit meinem gewaltigen Einfallsreichtum zu stolzieren :rofl: :rofl:)... Die UDF ist noch sehr wirr und der Funktionsumfang könnte auch noch erweitert werden. Falls ihr Ideen habt oder die UDF gut findet kann ich ja nochmal alles überarbeiten...


    Die 2 genannten Funktionen sind:

    [autoit]

    Func _EasyTcpRecv($mainsocket, $prefix)
    Func _EasyTcpSend($mainsocket, $name, $x_param0 [, $x_param0 = Default])

    [/autoit]


    mit Hilfe dieser UDF kann man Daten über einen stink normalen TCP Socket versenden und empfangen.
    Das besondere daran ist die Art des Transports der Daten, ich möchte versuchen das ganze an einem einfachen Server-Client Beispiel zu demonstrieren...

    Server:

    Spoiler anzeigen
    [autoit]

    #include "EasyTcp.au3"

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

    TCPStartup()

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

    Global $iListener = TCPListen("", 8000)
    Global $iSocket = -1

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

    Do
    $iSocket = TCPAccept($iListener)
    Until $iSocket <> -1

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

    While True
    _EasyTcpRecv($iSocket, "_Aktion_")
    Sleep(100)
    WEnd

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

    Func _Aktion_Nachricht($packet)
    MsgBox(0, "_Aktion_Nachricht", "Nachricht vom Client: " & _EasyTcpGetData($packet, 1000))

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

    Sleep(1000)
    TCPCloseSocket($iSocket)
    Exit TCPShutdown()
    EndFunc

    [/autoit]

    Client:

    Spoiler anzeigen
    [autoit]

    #include "EasyTcp.au3"

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

    TCPStartup()

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

    Global $iSocket = -1

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

    Do
    $iSocket = TCPConnect("127.0.0.1", 8000)
    Until $iSocket <> -1

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

    _EasyTcpSend($iSocket, "Nachricht", 1000, "Hallo und tschuess.")

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

    Sleep(1000)
    TCPCloseSocket($iSocket)
    Exit TCPShutdown()

    [/autoit]

    Was hier passiert:
    Nachdem die Verbindung zwischen Server und Client steht, sendet der Client eine Nachricht über EasyTcp zum Server. Diese Nachticht enthält folgende Informationen:
    -Name der Nachricht => "Nachricht"
    -Packetdaten (Diese Daten werden über eine Nummer identifiziert) => Datenfeld1000 enthält: "Hallo und tschuess."

    Der Server empfängt dieses Datenpacket, wertet es aus und macht mit den Daten folgendes:
    -Er ruft die Funktion auf, welche sich aus dem Prefix (Übergeben in der _EasyTcpRecv()-Funktion) und dem Namen der Nachricht zusammensetzt. In diesem Fall: "_Aktion_" & "Nachricht"
    -Dieser Funktion wird das empfangene Packet übermittelt.
    -Mit der Funktion _EasyTcpGetData() wird dem Packet das Datenfeld1000 ausgelesen und der Inhalt wird per MsgBox() dargestellt.

    Gleiches Verhalten funktioniert auch umgekehrt! (Client->Server und Server->Client)
    Wie man das ganze umsetzt kann ich bei genügend Nachfrage auch per Video Tutorial posten.
    Eine Ausführliche Dokumentation kann ich bei Nachfrage auch erstellen, allerdings schien mir das jetzt noch ein bisschen voreilig. (Vielleicht kanns ja niemand gebrauchen :D)


    Mit freundlichen Grüßen,
    Absolem

  • Is an sich eine gute Idee, doch ist es wirklich nötig? Mit diesen "Überschriften" kann man auch ganz einfach TCP arbeiten indem man jeder Nachricht eine ID zuweist (Je nach Anzahl der unterschiedlichen Pakete würde sogar ein Byte reichen. Man haut ein Switch rein und hat direkt alles. So muss man jedesmal eine extra Funktion erstellen und es wird (Für mich zumindest) Übersichtlicher.

    Die Frage die sich mir stellt ist jetzt, wenn man z.B. 3 Messages hat die geprüft werden, dann wird doch jedesmal was aus dem Buffer genommen oder nicht? Das sollte doch dann am Ende fehlen. PS: Hab mir die UDF noch nicht angeschaut!

    Ich will dich nicht endmutigen dich weiterhin damit zu beschäftigen, bin mir sicher das es jmd. gibt der es gebrauchen könnte.