Beiträge von Racer

    Hallo!


    Wie im Titel schon beschrieben versuche ich eine AD-Abfrage vor der Installation eines Windows zu machen. Sinn und Zweck der Aktion: Gibt es schon ein Computerkonto im AD ?
    So weit komme ich aber nicht, denn die Verbindung zum AD kommt gar nicht zustande!


    Dazu verbinde ich mich mit Hilfe das AD_UDF zur Domäne:


    Code
    local $username = "*********" ;wird im Forum nicht veröffentlicht
    local $password = "********"   ;wird im Forum nicht veröffentlicht
    local $domain = "DC=server,DC=to,DC=at" 
    local $server= "dc1.server.to.at" ;Domaincontroller
    $ret = _AD_Open($username,$password,"","server.to.at",$domain)
    echo ("AD_Open:" & $ret & @CRLF & "@error:" & @error)

    Auf meine Arbeitsrechner (Windows 7) als Mitglied im AD funktioniert das immer. in $ret steht 1 und @error hat 0. So weit so gut!


    Verwende ich das compiliert Script in meiner Installationsumgebung (WinPE5 V6.3.9600) bekomme ich bei $ret 0 und @error:4 zurück!




    Ein "net use * \\server\freigabe /user:domain\user kennwort" funktioniert - ergo, DNS OK, AD OK, Netz OK


    Nachdem ich die Doku auf und ab studiert habe suche ich bei Euch hilfe!


    lg
    Racer

    Nur zur Info: Es gibt auch Tablets mit Intelprozessoren (i3, Atom,...) auf denen Windows läuft!
    Mit Windows 10 für ARM wird es noch ein bißchen dauern - aber die Erste Version von Window 10 auf einen Raspery Pi 2 habe ich schon gesehen und der hat auch eine ARM-Prozessor!


    lg
    Racer

    Dachte ich mir schon das es nicht so einfach geht :(


    Aus dem Script heraus hatte ich keine Probleme - das ist ja sehr gut dokumentiert, aber in diesen speziellen Fall hätte ich es getrennt benötigt!


    Warum tut man so was: Eigentlich brauche nur einen einfachen (optisch ansprechenden) Fortschrittsbalken, der aber auch dann reagiert wenn per Hand in einem Dosfenster ein robocopy angestossen wird! Ergo zwei eigenständige Prozesse die nicht miteinander Verwandt sind :)


    lg

    Hallo!


    Wie schon in meinen Titel geschrieben möchte ich einen Dosouput auslesen. Die Herausforderung ist das der Prozess nicht von AutiIT aus gestartet wird. Geht so etwas?


    Was habe ich bisher:



    ;Erst was tun wenn der Prozess "robocopy.exe" gestartet worden ist
    do
    $ret = ProcessGetStats ("robocopy.exe")
    sleep (10)
    until $ret <> 0


    ;Hier den Stream lesen
    do
    $ret = ProcessGetStats ("robocopy.exe")
    $line = StdoutRead($ret)
    if $line <> "" then
    ConsoleWrite($line & @crlf)
    endif
    until $ret = 0


    Das Programm reagiert, da das Script brav wartet bis ich einen Robocopy Befehl im Dos-Fenster gestartet habe, und beentet auch brav wenn der Copy-Prozess abgeschlossen ist!
    Nur beim "Consolewrite" sehen ich nichts!


    lg
    Racer

    Naja, dann bist mit dem Task eh richtig unterwegs :)


    Der Task wird wie ein Dienst vom System her gestartet und läuft. Der Prozesse ist im Taskmanager sichtbar (Benutzer: system) und kann nur von einern anderen Administrator (=user mit Adminrechte) beendet werden.
    Auf eine TS ist das unabhängig ob ein User dann angemeldet ist oder nicht - das hat nichts mit den Task zu tun!
    Was nicht geht (unter Windows 2003), erst ab Vista (ergo Windows 2008 Server) den Task remote über die Aufgabensteuerung zu beenden. Für ältere System (die man eh nicht mehr verwenden sollte) würde dann nur die Möglichkeit bestehen den Prozesse per RPC "abzuschiessen" (z.B.: pskill \\server ...)




    lg
    Racer

    Hallo!


    Das Thema Autoit als Server laufen zu lassen interessiert mich auch brennend. Leider bin ich auch nicht viel weiter gekommen als die Programme per Helper als Service zu integrieren. Direktes Eintrage terminiert nach kurzer Zeit mit einem Fehler. Scheinbar muss ein Servicedienst anderes Erzeugt werden, das (ist nur eine Vermutung) vom Compiler abhänig ist.


    Eine - für mich - elegante Methode das zu umgehen ist über den taskscheduler von Windows. Der läßt sich auch remote steuern, Programme mit Systemrechte laufen und es gibt eine Commandline dafür.


    Um ein selbstgeschriebenes Programm als "Dienst" laufen zu lassen mache ich folgenden Eintrag:
    schtasks /create /SC onstart /TN MeinProgramm /TR "c:\windows\system32\MeinProgramm.exe" /user:leser" /RU SYSTEM /RL highest /F


    Damit wird "MeinProgramm.exe" bei jedem Systemstart mit Systemrechte gestartet.


    vielleicht hilft Dir das!


    lg
    Racer

    Danke das hat geholfen - manchmal ist am wirklich schon betriebsblind!


    Schade nur das ich jetzt alle case-Abfragen anpassen muss.... sind doch schon viele Zeilen Code geworden!


    lg
    Racer

    Hallo!


    Ich brauche Eure Hilfe - vielleicht ist es auch ganz leicht und ich bin nur blind, aber bis jetzt habe ich weder in der Hilfe noch im Forum eine Lösung gefunden.


    Ich habe zwei Fenster, beide haben einen Schliessen-Button, aber nur bei einem soll das Programm beendet werden. Wie kann ich unterscheiden bei welchen Fenster das $GUI_EVENT_CLOSE gedrückt worden ist?


    Beispiel:

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>



    $Form1 = GUICreate("Form1", 200, 200, 10, 10)
    GUISetState(@SW_SHOW)


    $Form2 = GUICreate("Form2", 200, 200, 120, 10)
    GUISetState(@SW_SHOW)



    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit


    EndSwitch
    WEnd


    Was ich vermeiden möchte ist das ich den GUIOnEventMode verwenden muss, denn mein eigentliches Programm ist schon fertig und basiert aufG UIGetMsg.


    lg
    Racer

    Ich habe den "Fehler" durch Zufall selber gefunden:


    Ändere ich die Reihenfolge wie die Fenster erzeugt werden von "Runtime Log" -> "Bereicht" -> "Hauptfenster" auf "Hauptfenster" -> "Runtime Log" -> "Bereicht"
    funktioniert der Sprung mit der TAB-Taste auch wieder.


    Aber vielleicht hat jemande eine Erklärung für mich, denn Verstehen tue ich es nicht!


    lg
    Racer

    Hallo!


    Nachdem ich mein Projekt fast fertig habe, bin ich auf eine kleine "Unangenehmheit" gestossen:
    In einer GUI habe ich 3 Eingabefelder und hier kann ich nicht mehr mit der TAB-Taste in das nächste springen!


    Gibt es da einen Parameter bei der Erstellung der GUI der zubeachten ist (ich bin da leider nicht so ganz Sattelfest)?


    func kassenbuch_gui ()


    local $y_pos
    local $x_pos
    local $ret, $tmp



    $ret = ini_file_read ($inifile)


    if $ret = -1 then
    MsgBox (16, "Warnung", "Datei " & $inifile & " nicht gefunden!" & @crlf & @crlf & "Programm kann fortgesetzt werden")
    $y_pos = 20
    $x_pos = 20
    else
    $x_pos = gettok ($ret, "|" , 1)
    $y_pos = gettok ($ret, "|" , 2)
    endif


    ;Eigenes Fenster für Runtime Log (wird nicht in einer Datei aufgezeichnet)
    $logview_fenster = GUICreate("logviewer", 500, 300, 10, 10, BitOR($ES_READONLY,$ES_WANTRETURN))
    $logvier_edit = _GUICtrlRichEdit_Create($logview_fenster, "", 0, 0, 495, 280, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    GUISetState($GUI_HIDE, $logview_fenster)


    ;Eigenes Fenster für den Bericht
    $Bericht = GUICreate("Bericht", 700, 500, 10, 10, BitOR($ES_READONLY,$ES_WANTRETURN))
    $Obj = ObjCreate("Shell.Explorer.2")
    $browser = GUICtrlCreateObj($Obj, 0, 0, 695, 440)
    $exit = GUICtrlCreateButton("Exit", 600, 445, 75, 25)
    GUISetState(@SW_HIDE)


    $kassenbuch = GUICreate($titel, 820, 650, $x_pos, $y_pos)
    $menu_datei = GUICtrlCreateMenu("&Datei")
    $menu_laden = GUICtrlCreateMenuItem("Laden", $menu_datei)
    $menu_speichern = GUICtrlCreateMenuItem("Speichern", $menu_datei)
    $menu_speichernals = GUICtrlCreateMenuItem("Speichern als", $menu_datei)
    $menu_ende = GUICtrlCreateMenuItem("Ende", $menu_datei)
    $info = GUICtrlCreateMenu("&Info")
    $info_about = GUICtrlCreateMenuItem("About", $info)
    $kalender = GUICtrlCreateMonthCal($heute, 5, 460, 191, 164)
    $info_lable = GUICtrlCreateLabel("Info", 5, 0, 1000, 30)
    GUICtrlSetFont($info_lable, 12, 800, 0, "MS Sans Serif")
    GUICtrlSetColor ($info_lable, 0x0000ff)
    $gruppe1 = GUICtrlCreateGroup("Eingabefeld", 200, 460, 615, 97)
    $Einnahme = GUICtrlCreateRadio("Einnahme", 210, 480, 97, 33)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $Ausgabe = GUICtrlCreateRadio("Ausgabe", 210, 510, 100, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $feld1 = GUICtrlCreateInput ("Textfeld", 320, 510, 120, 21)
    $feld2 = GUICtrlCreateInput("", 460, 510, 60, 21)
    $feld3 = GUICtrlCreateInput("", 530, 510, 60, 21)
    $text_lable1 = GUICtrlCreateLabel("Kunde", 320, 490, 120, 19)
    $text_lable2 = GUICtrlCreateLabel("Arbeit €", 460, 490, 120, 19)
    $text_lable3 = GUICtrlCreateLabel("Verkauf €", 530, 490, 120, 19)
    $text_lable4 = GUICtrlCreateLabel("Kategorie", 600, 490, 120, 19)
    $kategorie = GUICtrlCreateCombo("", 600, 510, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL,$CBS_SORT,$CBS_DROPDOWNLIST ))
    GUICtrlSetData ($kategorie, "|" & $kategorie_daten)
    GUICtrlCreateGroup($kategorie, -99, -99, 1, 1)
    $gruppe2 = GUICtrlCreateGroup("Steuerung", 200, 550, 615, 60)
    $enter = GUICtrlCreateButton("Enter", 216, 570, 75, 25)
    $clear = GUICtrlCreateButton("Clear", 312, 570, 75, 25)
    $sort = GUICtrlCreateButton("Sortieren", 408, 570, 75, 25)
    $nachunten = GUICtrlCreateButton("nach unten", 504, 570, 75, 25)
    $Berichte = GUICtrlCreateButton("Bericht", 600, 570, 75, 25)
    $logview = GUICtrlCreateButton("Logview", 704, 570, 75, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $gruppe3 = GUICtrlCreateGroup("Anzeige", 5, 32, 810, 430)
    $ListView1 = GUICtrlCreateListView("Datum EN|Datum DE|E/A|Text |WERT1|WERT2|Kategorie ", 10, 56, 800, 400)
    $contextmenu = GUICtrlCreateContextMenu ($ListView1)
    $bearbeiten = GUICtrlCreateMenuitem ("bearbeiten", $contextmenu)
    $loeschen = GUICtrlCreateMenuitem ("löschen", $contextmenu)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    endfunc


    Alles was Grafisch ist wird teilweise durch eine INI-File bestimmt (Position der GUI, Inhalt vom Combofeld,...) der Rest ist statisch.
    Genau gesagt geht es um das $feld1 bis $feld3 !


    Habt Ihr einen Tipp für mich?


    lg
    Racer


    Ach ja: Bei der Eingabe ist mir aufgefallen das im Eingabefeld unregelmäßig die Backspace-Taste bzw. die Cursortasten nicht mehr funktionieren!

    Wenn ich deinen Code jetzt richtig verstehe, wären, glaube ich, Maps ideal für dich. Gibt es seit der Beta 3.3.13.4, lad dir einfach mal die aktuelle Beta runter und probier mal die Maps aus, bevor du mit Assign rumhantierst.


    Edit: Hier mal ein Beispiel zu Maps: http://www.autoitscript.com/fo…v33136-beta/#entry1185006

    Ohne das ich mich jetzt mit Maps auskenne, sieht das Beispiel schon sehr interessant aus! Das werde ich mir mal in Ruhe geben!


    Vielen Dank!


    @all: Ihr seit alle Spitze - so ein gutes Supportforum gibt es selten!!

    Vielen Dank für Eure Antwort!


    BugFix : Nein, eben nicht! ich brauche für jede Kategorie (z. Schuhe, Hosen, Hemden,...) ein eigenes Dictionary! Ich mag Array's, nur manchmal sind sie einfach nicht gut zum Handhaben, insnbesonders wenn einzelen Elemente in großen Datenmengen (>10000) gesucht werden soll. Und da noch querverweise....da sind die Dic's viel schneller!



    Ich habe jetzt eine Lösung gefunden (nach langer Internetsuchen):


    Beipiel:



    Dim $dic[4]
    $dic[1] = "eins"
    $dic[2] = "zwei"
    $dic[3] = "drei"


    for $i = 1 to 3
    Assign ($dic[$i] , ObjCreate("Scripting.Dictionary"))
    next


    $eins.add("eins","erstes Dic")
    $zwei.add("zwei","zweites Dic")
    $drei.add("drei","drittes Dic")


    msgbox (0 , "Ergebnis", $eins.item("eins") & @crlf & $zwei.item("zwei") & @crlf & $drei.item("drei"))


    @Tolleule: hmmm...sieht interessant aus! Muss werde ich mir auch ansehen


    vielen Dank!

    Hallo!


    Ich stehe wiedermal an und hoffe das Ihr mir helfen könnt! Die Forumsuche hat mir leider keine Ergebnisse gebracht!


    Ich würde gerne Dictionary's dynamisch erzeugen, doch ich weiß nicht ob und wie das geht
    Momentan erstelle ich ein "statisches" Objekt so:


    $dback = ObjCreate("Scripting.Dictionary")


    Jetzt würde ich aber für dynamische Kategorien (werden durch den Benutzer erzeugt = weiß nicht wie viele es geben wird) ein eigenes Dictionary benötigen. Am Ende beinhaltet des Dictionary (=Kategorie) viele Daten!
    Dadurch ich kann es nicht vorab hardcodet erzeugen.


    Ein Array fällt leider aus - das wäre für meine Aufgabenstellung mehr sehr schwer möglich!


    vielen Dank!
    Racer

    Hallo!


    Ich hoffe Ihr könnt mir helfen, denn das RegExp treibt mich noch in den Wahnsinn.


    Folgendes Problem habe ich:



    msgbox (0 , "" , (stringregexp ("genau123" , ".*au", 0 )))


    Autoit sagt mir das das Suchmuster übereinstimmt (so weit hat er ja auch recht) nur ich brauche den rechten Teil nach (au) nicht. Daher stimmt das Ergebnis für mich nicht!
    Frage: Wie kann ich im RegExp sagen das nach dem "au" nichts mehr stehen darf und daher die Antwort falsch ist?
    Ich hoffe ich habe das nicht zu schlecht beschrieben was ich möchte!


    Beispiel:


    stringregexp ("genau123" , ".*123", 0 ....true
    stringregexp ("genau123" , ".*au123", 0 ....true
    stringregexp ("genau123" , ".*genau", 0 ....false (da ja im Suchstring hinten noch 123 steht)


    vielen Dank


    lg
    Racer


    --------------------------------------------------------------------------------------------------------


    Fast habe ich die Nerven weggeschmissen, doch im letzten Moment habe ich die Lösung gefunden:


    msgbox (0 , "" , (stringregexp ("genau123" , ".*au\b", 0 )))


    Durch das \b wird "exakt" gesucht.....


    Das hat nichts mit einem Fehler in der Hilfe zu tun. Dein Fehler ist lediglich ein Resultat aus der Tatsache, dass du TCP noch nicht verstanden hast bzw. hattest.
    Nebenbei bemerkt: Sendet der aktuelle Client nicht in ein paar Sekunden bzw Millisekunden seine Daten wird die Verbindung vom Server her abgebrochen ob wohl der Client noch nicht senden konnte. Außerdem wird alles größer 4096 einfach abgeschnitten...


    Lieber Christoph!


    Ich habe weder was von einem Fehler in der Doku geschrieben noch mag ich es wenn Du versucht mir zu sagen was ich kann oder nicht! Deine Aussage hat nichts mit meiner gestellten Frage zu tun! Vielleicht hast Du die Doku anders verstanden als ich - ok! Aber bitte unterlasse solche Bemerkungen das ich (ohne das Du mich kennst) nichts von TCP verstehe!


    Die Doku ist nicht perfekt, aber ich bin trotzdem denen sehr Dankbar die sich die Mühe machen und eine Übersetztung schreiben! Wenn dann was nicht ganz klar ist gibt es immer noch ein Forum, und in diesen Fall hat mir misterspeed sehr schnell und professionell geholfen (vielen Dank nochmal an der Stelle)!


    lg
    Racer

    Jetzt ist der Groschen gefallen!


    Ich habe jetzt meine Serverteil so geändert:


    While 1
    $socketid = TCPAccept($socket)
    If $socketid >= 0 Then
    $senderip = SocketToIP ($socketid)
    local $input = TCPRecv ($socketid, 4096)
    filewrite ($datei, @HOUR & ":" & @MIN & ":" & @SEC & " " & $senderip & " " & $input & @crlf)
    TCPCloseSocket ($socketid)
    EndIf
    WEnd


    Und siehe da, es wird nur das eine Port (in meinen Fall TCP 2000) angezeigt!


    Super, vielen Dank!


    Leider geht das nicht so ganz aus der deutschen Doku hervor, denn man kann das leicht (so wie ich) so interpredieren, das damit der Socket (der lauscht) wieder geschlossen wird!!!!


    lg
    Racer


    PS: TCPShutdown kommt noch - versprochen ;)

    Ahja und natürlich sollte man nicht nur unbenutzte Sockets schließen, sondern bei Programmende auch


    tcpshutdown()


    aufrufen, was letztlich alles sauber aufräumen sollte.

    Ok, jetzt hast Du es geschafft - ich stehe entgültig am Schlauch ?( ! Wie schliesse ich Sockets die nicht gebaucht werden? Ich mache ja nur eines auf und das brauche ich in alle Ewigkeit.... daher auch kein TCPShutdown.....

    Zwei Dinge...
    Server: Du schließt den Socket nicht, also kaum verwunderlich, dass dieser noch ewig rumgammelt
    Client: Wozu setzt du millionenfach das $GUI_EVENT_CLOSE in deiner while Schleife? Warum setzt du Events für Controls und aktivierst den oneventmode erst danach?

    Hallo!


    Danke für deine Antwort:


    zu Server: Naja, wenn ich den Socket schliesse kann ja keiner mehr was schicken!


    oder habe ich laut Doku etwas falsch verstanden:


    1) TCP starten
    2.) Socket aufmachen
    3.) lauschen am Netz und bei Eingang darauf Daten verabeiten


    Es Webserver lauscht ja auch, mach dann für den Datentransfer ein Socket auf und baut es sofort wieder ab... so was würde ich hier brauchen.
    Oder kann ich das von Client her aus irgendwie sagen das die Verbindung gecloset werden kann?



    zu Client: stimmt, ist aber nur ein Testclient der dann wieder weg kommt! Ich habe den Client nur damit ich mit irgendwas Daten senden kann! Bin mit der GUI noch nicht so sattelfest!


    lg
    Racer

    Hallo!


    Nachdem ich das Forum studiert aber leider nichts zu dem Thema gefunden habe frage ich mal die Spezialisten:


    Wo will ich hin: Ein Serverprogramm das via TCP Daten empfängt und in ein Logfile speichert - gibt bereits und funktioniert
    Weiter gibt es einen Testclient der Daten schickt - funkt local als auch übers Netz!


    Jetzt kommt die Frage:


    Ich mache am Server ein Socket auf das lauscht auch ganz brav am Netz und wenn Daten kommen reagiert es wie gewollt darauf. ABER die Verbindung wird nicht nach gleich abgebaut (mit einem TCP-Monitor sieht man das). Kommt die nächste Verbindung wird ein Socket aufgemacht usw usw.


    Da jetzt die Clients mehr oder weniger gleichzeitig die Daten schicken werden so hunterte Ports am Server belegt und im schlimmsten Fall kracht es dann!


    Ich habe versucht mit der Option TCPTimeout die Zeit zu verkürzen damit das Port schneller freigegeben wird, aber das scheint hier wirkungslos zu sein!


    Nur um einen Eindruck zu bekommen ein Screenshot (die Verbindungen sind auch Minuten nachdem der Client beendet worden ist noch da):



    Ist das einfach so (weil Windows so ist) oder gibt es da noch einen anderen Trick? Oder wäre hier UDP besser geeignet?


    Sicherheitshalber meine beiden Scripts:


    Server:


    ;Druckerdaten erfassung - Server


    #include <advfha_proc.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>



    local $logfile = "d:\printer.log"
    local $datei = FileOpen ($logfile, 1)



    ;TCP-Service starten
    TCPStartup ()


    local $ip=@ipaddress1
    local $port = 2000
    local $text=""
    local $senderip



    local $socket = TCPListen ($ip,$port, 2048)
    local $socketid = 0


    While 1
    $socketid = TCPAccept($socket)
    If $socketid >= 0 Then
    $senderip = SocketToIP ($socketid)
    local $input = TCPRecv ($socketid, 4096)
    filewrite ($datei, @HOUR & ":" & @MIN & ":" & @SEC & " " & $senderip & " " & $input & @crlf)
    EndIf
    WEnd





    func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet


    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")


    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf


    $sockaddr = 0


    Return $aRet
    EndFunc ;==>SocketToIP




    Testclient:



    ; TCP-Sender test


    #include <advfha_proc.au3>



    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiIPAddress.au3>
    #include <WindowsConstants.au3>
    #include <GuiIPAddress.au3>


    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("TCP-Client", 602, 347, 216, 659)


    $Edit1 = GUICtrlCreateEdit("", 32, 56, 545, 217, $ES_READONLY)
    ;GUICtrlSetState(-1, $GUI_DISABLE)


    global $Eingabe = GUICtrlCreateInput("Eingabe", 32, 296, 441, 21)
    $Senden = GUICtrlCreateButton("Senden", 496, 296, 75, 25)
    GUICtrlSetOnEvent(-1, "senden")


    $IPAddress1 = _GUICtrlIpAddress_Create($Form1, 32, 16, 130, 21)
    _GUICtrlIpAddress_Set($IPAddress1, "x.x.x.x")


    $Port = GUICtrlCreateInput("2000", 168, 16, 49, 21)
    ;GUICtrlSetData($Port, "2000")


    GUISetState(@SW_SHOW)


    #EndRegion ### END Koda GUI section ###
    Opt("GUIOnEventMode", 1)



    ;TCP-Service starten
    TCPStartup()


    global $socket_jn = -1
    global $socketid = 0





    While 1
    GUISetOnEvent($GUI_EVENT_CLOSE, "Ende")
    WEnd




    func Ende()
    exit
    endfunc ;==>Ende



    func senden()


    $kanal = GUICtrlRead($Port)
    $ip = _GUICtrlIpAddress_Get($IPAddress1)



    local $text = GUICtrlRead($Eingabe)
    local $alttext = GUICtrlRead($Edit1)


    $socketid = TCPConnect($ip, $kanal)
    local $ret = TCPSend($socketid, $text)
    TCPCloseSocket($socketid)


    $text = $alttext & @crlf & ">" & @HOUR & ":" & @MIN & ":" & @SEC & " on " & $ip & ":" & $kanal & " SocketID:" & $socketid & " " & $text


    GUICtrlSetData($Edit1, $text)
    GUICtrlSetData($Eingabe, "")


    endfunc ;==>senden