AutoIt Multi Server + Client

  • Hi leute, ich hab mir heute erst die ganzen Posts gelesen, weil ich ja zum Teil inaktiv bin/war.
    Und auf eure Anfragen im Thread "Auto IT TCP Chat" poste ich jetzt das Script hier.

    Allerdings beim Testen auf meinem Windows 7 PC hat es ohne Probleme funktioniert,
    nur auf meinem MacBook mit VirtualBox über Windows XP nicht, wahrscheinlich liegts an der VirtualBox dass er es immer wieder schließt.
    Ist mir aber jetzt egal...

    Was es schon kann:
    - Auf TCP Reagieren und "antworten + ausführen"

    Was es später dann noch dazu gecodet wird:
    - UDP
    - Alles was mir spontan noch dazu einfällt um das Netzwerk noch ausbaufähiger zu machen ;)

    Fest gelegte Ports:
    TCP => 33150
    UDP => 33151

    Die fest eingetragene IP "192.168.1.33" ist nur deswegen da, weil ich bei meinem Modem alle IPs von meinem Netzwerk für das jeweilige Gerät immer reservieren tu, so dass jeder seine feste IP hat.

    Es braucht halt alles so seine Zeit...


    Hier der Server:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=server.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_UseUpx=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ; Multi Server
    ; Coded by Fabi
    ; AutoIt v3.3.6.1
    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <GuiEdit.au3>

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

    $firststart = IniRead(@ScriptDir & "\server.ini","Server","Firststart","0")
    If $firststart = 0 Then
    IniWrite(@ScriptDir & "\server.ini","Server","Firststart","1")
    IniWrite(@ScriptDir & "\server.ini","Socket","IP","server")
    ElseIf $firststart = 1 Then
    $read = IniRead(@ScriptDir & "\server.ini","Socket","IP","server")
    EndIf

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

    Const $LocalhostIP = "127.0.0.1"
    Const $ServerIP = "192.168.1.33"
    Const $ServerTCPPort = "33150"
    ;Const $ServerUDPPort = "33151" ====> UDP noch außer betrieb!

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

    ; GUI DESIGN CODING
    $server = GUICreate("Multi Server",500,300)

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

    $menuserver = GUICtrlCreateMenu("Server")
    $config = GUICtrlCreateMenuItem("Server konfiguration",$menuserver)
    $beenden = GUICtrlCreateMenuItem("Server beenden",$menuserver)

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

    $log = GUICtrlCreateEdit("",0,0,500,280,$ES_READONLY)
    GUICtrlSetBkColor($log,0xFFFFFF)

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

    GUISetState(@SW_SHOW)

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

    TCPStartup()
    If $read = "server" Then
    ; Erstellt einen lauschenden "TCP SOCKET"
    $TCPSocket = TCPListen($ServerIP, $ServerTCPPort)
    If $TCPSocket = -1 Then Exit
    GUICtrlSetData($log,"Multi Server erfolgreich mit TCP gestartet... ("&$ServerIP&" : "&$ServerTCPPort&")")
    ElseIf $read = "localhost" Then
    ; Erstellt einen lauschenden "TCP SOCKET"
    $TCPSocket = TCPListen($LocalhostIP, $ServerTCPPort)
    If $TCPSocket = -1 Then Exit
    GUICtrlSetData($log,"Multi Server erfolgreich mit TCP gestartet... ("&$LocalhostIP&" : "&$ServerTCPPort&")")
    EndIf

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

    While 1

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

    ; Verbindung ermöglichen

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

    $ConnectedTCPSocket = TCPAccept( $TCPSocket)
    TCPSend($ConnectedTCPSocket,"ok")
    If $ConnectedTCPSocket >= 0 Then

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

    $entwerten = TCPRecv($ConnectedTCPSocket,512)

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

    If $entwerten = "test" Then
    $readlog = GUICtrlRead($log)
    GUICtrlSetData($log,"["&@HOUR&":"&@MIN&":"&@SEC&"] "&"Daten: "& $entwerten & @CRLF & $readlog)

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

    ElseIf $entwerten = "firefox" Then
    $readlog = GUICtrlRead($log)
    GUICtrlSetData($log,"["&@HOUR&":"&@MIN&":"&@SEC&"] "&"Daten: "& $entwerten & @CRLF & $readlog)
    ShellExecute("firefox.exe")

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

    ;ElseIf $entwerten = "" Then ; Weitere befehle...

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

    EndIf
    EndIf

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

    ; GUI FUNKTIONEN
    Switch GUIGetMsg()
    Case $config
    MsgBox(0,"Multi Server","Configbox")
    Case $beenden
    _Shutdown()
    Case $GUI_EVENT_CLOSE
    _Shutdown()
    EndSwitch
    WEnd

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

    Func _Shutdown()
    TCPCloseSocket($ConnectedTCPSocket)
    TCPCloseSocket($TCPSocket)
    TCPShutdown()
    Exit
    EndFunc

    [/autoit]

    Hier der Client:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=client.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_UseUpx=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ; Client für Multi Server (TCP)
    ; Coded by Fabi
    ; AutoIt v3.3.6.1
    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <GuiEdit.au3>
    #include <GuiStatusBar.au3>

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

    Dim $VerbindeTCP = -1

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

    Const $MultiServerIP = "192.168.1.33"
    Const $MultiServerPortTCP = "33150"
    Local $send
    ;Const $MultiServerPortUDP = "33151" ====> UDP noch außer betrieb!

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

    ; GUI CODING DESIGN
    $clientgui = GUICreate("Multi Client",600,400)
    $clientmenu = GUICtrlCreateMenu("Client")
    $config = GUICtrlCreateMenuItem("Client konfiguration",$clientmenu)
    $beenden = GUICtrlCreateMenuItem("Beenden",$clientmenu)

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

    $clientlog = GUICtrlCreateEdit("",0,0,600,330,$ES_READONLY)
    GUICtrlSetBkColor($clientlog,0xFFFFFF)

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

    $befehl = GUICtrlCreateInput("",0,332,520,25)
    $schicken = GUICtrlCreateButton("Senden",525,332,75,25)

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

    $leiste = _GUICtrlStatusBar_Create($clientgui)

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

    TCPStartup()
    _GUICtrlStatusBar_SetText($leiste,"TCP gestartet...",0,0)
    GUISetState(@SW_SHOW)
    While 1
    connection()
    Switch GUIGetMsg()
    Case $schicken
    $send = GUICtrlRead($befehl)
    TCPSend($VerbindeTCP,$send)
    _GUICtrlStatusBar_SetText($leiste,"Der Text: "&$send&" wird gesendet...",0,0)
    Case $clientmenu
    MsgBox(0,"","Client konfiguration")
    _GUICtrlStatusBar_SetText($leiste,"Der Client wird konfiguriert...",0,0)
    Case $beenden
    TCPShutdown()
    Exit
    Case $GUI_EVENT_CLOSE
    TCPShutdown()
    Exit
    EndSwitch
    WEnd
    Func connection()
    $VerbindeTCP = TCPConnect($MultiServerIP,$MultiServerPortTCP)
    _GUICtrlStatusBar_SetText($leiste,"TCP Verbindung wird aufgebaut...",0,0)
    If TCPRecv($VerbindeTCP,2) = "ok" Then
    _GUICtrlStatusBar_SetText($leiste,"TCP Verbindung hergestellt!",0,0)
    ElseIf @error Then
    _GUICtrlStatusBar_SetText($leiste,"Die TCP Verbindung schlug fehl, weil: "&@error,0,0)
    EndIf
    EndFunc

    [/autoit]

    Ich wünsch euch viel Spaß damit^^
    Anregungen und Wünsche jederzeit Willkommen ;)

    PS: Hab eigentlich noch nie mit TCP oder UDP gearbeitet, aber ich lerne es erst dadurch ^^

    MfG
    Fabi

  • Ja bei mir auch
    Was ich eigentlich damit meinte ist ich habe auf meinem Macbook ja VirtualBox installiert und in die VirtualBox das Windows XP, und ich meinte ja damit dass es bei mir zicken macht ;D
    kp wieso aber ist ja mir egal :D

    Bis dann
    Gruß
    Fabi

  • Hallo,
    ich habe das gerade auch mal ausprobiert.
    es klappt zwar, aber ich frage mich warum du andauerend in der Schleife den Port neu aufmachst .

    Wenn ich mit dem Befehl NETSTAT ind er CMD Box nachsehe steigt die Anzahl der Verbindungen rasend an.
    Wenn ich das Connect() vor die While Schleife setzte macht er genau eine Verbindung auf, aber dann funktioniert der Empfang auf dem Server nicht ?

    Gruß
    Wolke

    Einmal editiert, zuletzt von wolkenloser (7. Dezember 2012 um 11:42)