brauche hilfe bei einem TCP chat

  • ich hab mir einen kleinen ip to ip chat gebastelt, und möchte jetzt, das man mit mehr wie nur einer person chatten kann.
    hier mein chat:

    chat
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <StaticConstants.au3>
    #include <GUIConstants.au3>
    #Include <File.au3>
    #Include <GuiEdit.au3>
    #include <GuiStatusBar.au3>
    #include <ScrollBarConstants.au3>
    #include <GuiIPAddress.au3>

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

    If IsAdmin() = 0 Then
    MsgBox(48,"WARNUNG"," !!!!!!ACHTUNG!!!!!!" & @CRLF & "Sie haben keine Administrator Rechte. Für dieses Programm werden Administrator rechte benötigt!")
    exit2()
    EndIf

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

    Global $ip1 ,$edit2 ,$chat ,$chat2 ,$recive

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

    $file = FileOpen(@WindowsDir & "/Chat/settings.ini",0)
    If $file = -1 Then
    If DirGetSize(@WindowsDir & "/Chat") = -1 Then
    DirCreate(@WindowsDir & "/Chat")
    EndIf
    _FileCreate(@WindowsDir & "/Chat/settings.ini")
    $file = FileOpen(@WindowsDir & "/Chat/settings.ini",2)
    FileWriteLine($file,"[settings]")
    FileWriteLine($file,"")
    FileWriteLine($file,"Name=" & @ComputerName)
    $i = 1
    Do
    FileWriteLine($file,$i & "=0")
    $i += 1
    Until $i = 21
    EndIf
    FileClose($file)

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

    $openlog = FileOpen(@WindowsDir & "/Chat/" & @MDAY & "." & @MON & "." & @YEAR & ".txt",0)
    If $openlog = -1 Then
    If DirGetSize(@WindowsDir & "/Chat") = -1 Then
    DirCreate(@WindowsDir & "/Chat")
    EndIf
    $openlog = _FileCreate(@WindowsDir & "/Chat/" & @MDAY & "." & @MON & "." & @YEAR & ".txt")
    EndIf
    $socket = -1
    $socket2 = -1
    TCPStartup()
    If @error = 1 Then Exit

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

    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\Tetris.mp3", @WindowsDir & "\Chat\Tetris.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\hallo.mp3", @WindowsDir & "\Chat\hallo.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\hehe.mp3", @WindowsDir & "\Chat\hehe.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\adminsaege.mp3", @WindowsDir & "\Chat\adminsaege.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\axel.mp3", @WindowsDir & "\Chat\axel.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\buh.mp3", @WindowsDir & "\Chat\buh.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\bett.mp3", @WindowsDir & "\Chat\bett.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\bass.mp3", @WindowsDir & "\Chat\bass.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\da.mp3", @WindowsDir & "\Chat\da.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\cu.mp3", @WindowsDir & "\Chat\cu.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\frauen.mp3", @WindowsDir & "\Chat\frauen.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\ja.mp3", @WindowsDir & "\Chat\ja.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\jagut.mp3", @WindowsDir & "\Chat\jagut.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\lucker.mp3", @WindowsDir & "\Chat\lucker.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\messer.mp3", @WindowsDir & "\Chat\messer.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\moin.mp3", @WindowsDir & "\Chat\moin.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\nein.mp3", @WindowsDir & "\Chat\nein.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\schoen.mp3", @WindowsDir & "\Chat\schoen.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\rumble.mp3", @WindowsDir & "\Chat\rumble.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\sry.mp3", @WindowsDir & "\Chat\sry.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\ups.mp3", @WindowsDir & "\Chat\ups.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\np.mp3", @WindowsDir & "\Chat\np.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\bier.mp3", @WindowsDir & "\Chat\bier.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\licht.mp3", @WindowsDir & "\Chat\licht.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\lol.mp3", @WindowsDir & "\Chat\lol.mp3")
    FileInstall("C:\Dokumente und Einstellungen\Kevin\Desktop\PCKing\Scriptzeug\chat\sounds\karl.mp3", @WindowsDir & "\Chat\karl.mp3")

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

    $gui = GUICreate("IP",100,60)
    GUISetState(@SW_SHOW)
    $combo = GUICtrlCreateCombo(@IPAddress1,0,0,100,80)
    If @IPAddress2 <> "0.0.0.0" Then
    GUICtrlSetData(-1, @IPAddress2)
    EndIf
    If @IPAddress3 <> "0.0.0.0" Then
    GUICtrlSetData(-1, @IPAddress3)
    EndIf
    If @IPAddress4 <> "0.0.0.0" Then
    GUICtrlSetData(-1, @IPAddress4)
    EndIf
    $button = GUICtrlCreateButton("OK",0,20,100,40)
    While 1
    $msg = GUIGetMsg()
    If $msg = $button Then
    $ip1 = GUICtrlRead($combo)
    GUIDelete($gui)
    ExitLoop
    EndIf
    If $msg = $GUI_EVENT_CLOSE Then
    GUIDelete($gui)
    Exit2()
    EndIf
    WEnd

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

    $gui = GUICreate("IP",125,60)
    $ipaddress = _GUICtrlIpAddress_Create($gui,0,0)
    $button = GUICtrlCreateButton("ok",0,27,125,33)
    GUISetState(@SW_SHOW,$gui)
    While 1
    $msg = GUIGetMsg()
    If $msg = $button Then
    $ip = _GUICtrlIpAddress_Get($ipaddress)
    GUIDelete($gui)
    ExitLoop
    ElseIf $msg = $GUI_EVENT_CLOSE Then
    GUIDelete($gui)
    Exit2()
    EndIf
    WEnd

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

    If @error = 1 Then Exit
    $main = TCPListen($ip1,50,1)
    $socket = -1
    Do
    $socket = TCPAccept($main)
    $socket2 = TCPConnect($ip,50)
    Until $socket <> -1 Or $socket2 <> -1
    GUICreate("Chat V1.2",500,500)
    $edit = GUICtrlCreateEdit("",0,0,500,250)
    $edit2 = GUICtrlCreateEdit("",0,250,500,200)
    $settings = GUICtrlCreateMenu("Einstellungen")
    $menu1 = GUICtrlCreateMenuItem("Name Ändern",$settings)
    $button = GUICtrlCreateButton("Send",0,450,100,30)
    GUISetState(@SW_SHOW)
    $readlog = FileRead($openlog)
    GUICtrlSetData($edit,$readlog)
    $iLen = _GUICtrlEdit_GetTextLen($edit)
    _GUICtrlEdit_SetSel($edit, $iLen, $iLen)
    _GUICtrlEdit_Scroll($edit, $SB_SCROLLCARET)
    HotKeySet("{ENTER}","senden2")
    While 1
    $msg = GUIGetMsg()
    $recive = TCPRecv($socket,1000)
    $read = GUICtrlRead($edit)
    $send = GUICtrlRead($edit2)
    Select
    Case $socket = -1
    Do
    $socket = TCPAccept($main)
    Until $socket <> -1
    Case $socket2 = -1
    Do
    $socket2 = TCPConnect($ip,50)
    Until $socket2 <> -1
    Case $recive <> ""
    check($recive,2)
    Case $msg = $button
    check($send,1)
    Case $msg = $menu1
    $name = IniRead(@WindowsDir & "/Chat/settings.ini","settings","Name",@ComputerName)
    $input = InputBox("Name","Gib bitte den neuen Namen ein",$name)
    If $input = "" Then $input = @ComputerName
    IniWrite(@WindowsDir & "/Chat/settings.ini","settings","Name",$input)
    EndSelect
    If $msg = $GUI_EVENT_CLOSE Then Exit2()
    WEnd

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

    Func senden2()
    $send = GUICtrlRead($edit2)
    check($send,1)
    EndFunc

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

    Func check($chat,$check)
    $chat2 = $chat
    $split = StringSplit($chat,":")
    If $split[0] <> 1 Then
    If FileExists(@WindowsDir & "/Chat/" & $split[2] & ".mp3") Then
    SoundPlay(@WindowsDir & "/Chat/" & $split[2] & ".mp3")
    $chat2 = $split[1] & " " & $split[3]
    EndIf
    ElseIf $split[0] = 1 Then
    $chat2 = $split[1]
    EndIf
    If $check = 1 Then
    senden($chat,$chat2)
    ElseIf $check = 2 Then
    empfangen($chat2)
    EndIf
    EndFunc

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

    Func senden($send,$log)
    $name = IniRead(@WindowsDir & "/Chat/settings.ini","settings","Name",@ComputerName)
    TCPSend($socket2, $name & " -> " & $send & " (" & @HOUR & ";" & @MIN & ";" & @SEC & ")")
    FileClose($openlog)
    $openlog3 = FileOpen(@WindowsDir & "/Chat/" & @MDAY & "." & @MON & "." & @YEAR & ".txt",1)
    $writelog = FileWriteLine($openlog3, $name & " -> " & $log & " (" & @HOUR & ";" & @MIN & ";" & @SEC & ")")
    FileClose($openlog)
    $openlog2 = FileOpen(@WindowsDir & "/Chat/" & @MDAY & "." & @MON & "." & @YEAR & ".txt",0)
    $readlog = FileRead($openlog2)
    GUICtrlSetData($edit, $readlog)
    $iLen = _GUICtrlEdit_GetTextLen($edit)
    _GUICtrlEdit_SetSel($edit, $iLen, $iLen)
    _GUICtrlEdit_Scroll($edit, $SB_SCROLLCARET)
    GUICtrlSetData($edit2,"")
    EndFunc

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

    Func empfangen($empfang)
    FileClose($openlog)
    $openlog3 = FileOpen(@WindowsDir & "/Chat/" & @MDAY & "." & @MON & "." & @YEAR & ".txt",1)
    $writelog = FileWriteLine($openlog3, $empfang)
    FileClose($openlog)
    $openlog2 = FileOpen(@WindowsDir & "/Chat/" & @MDAY & "." & @MON & "." & @YEAR & ".txt",0)
    $readlog = FileRead($openlog2)
    GUICtrlSetData($edit, $readlog)
    $iLen = _GUICtrlEdit_GetTextLen($edit)
    _GUICtrlEdit_SetSel($edit, $iLen, $iLen)
    _GUICtrlEdit_Scroll($edit, $SB_SCROLLCARET)
    EndFunc

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

    Func Exit2()
    TCPShutdown()
    FileClose($openlog)
    FileDelete(@WindowsDir & "/Chat/hallo.mp3")
    FileDelete(@WindowsDir & "/Chat/hehe.mp3")
    FileDelete(@WindowsDir & "/Chat/adminsaege.mp3")
    FileDelete(@WindowsDir & "/Chat/axel.mp3")
    FileDelete(@WindowsDir & "/Chat/buh.mp3")
    FileDelete(@WindowsDir & "/Chat/bett.mp3")
    FileDelete(@WindowsDir & "/Chat/bass.mp3")
    FileDelete(@WindowsDir & "/Chat/da.mp3")
    FileDelete(@WindowsDir & "/Chat/cu.mp3")
    FileDelete(@WindowsDir & "/Chat/frauen.mp3")
    FileDelete(@WindowsDir & "/Chat/ja.mp3")
    FileDelete(@WindowsDir & "/Chat/jagut.mp3")
    FileDelete(@WindowsDir & "/Chat/lucker.mp3")
    FileDelete(@WindowsDir & "/Chat/messer.mp3")
    FileDelete(@WindowsDir & "/Chat/moin.mp3")
    FileDelete(@WindowsDir & "/Chat/nein.mp3")
    FileDelete(@WindowsDir & "/Chat/schoen.mp3")
    FileDelete(@WindowsDir & "/Chat/rumble.mp3")
    FileDelete(@WindowsDir & "/Chat/sry.mp3")
    FileDelete(@WindowsDir & "/Chat/ups.mp3")
    FileDelete(@WindowsDir & "/Chat/np.mp3")
    FileDelete(@WindowsDir & "/Chat/bier.mp3")
    FileDelete(@WindowsDir & "/Chat/licht.mp3")
    FileDelete(@WindowsDir & "/Chat/lol.mp3")
    FileDelete(@WindowsDir & "/Chat/karl.mp3")
    FileDelete(@WindowsDir & "/Chat/Tetris.mp3")
    Exit
    EndFunc

    [/autoit]


    freue mich über jede hilfe :D

    EDIT// die FileInstall und FileDelete am ende und anfang nicht beachten ^^

    Mfg. PCKing


    Mein PC

    CPU: AMD FX 8350 8x4.00GHz
    Ram: 8GB DDR3
    Grafikkarte: Nvidia Geforce GTX 960 (4GB)
    Festplatten: 500GB SSD 1TB HDD
    Laufwerk: Blueray RW+ Brenner

  • Ip to Ip Chat mit mehreren ohne Server is nicht... Einer muss ja die Clients sammeln und an jeden die Nachricht weiterleiten... Du könntest die Funktion einbauen, dass immer einer der Server ist, der die "Aufgabe" dann an einen Clienten weitergibt...

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • ich hatte mir das so gedacht:
    person1 chattet mit person2
    person3 connectet auf person2 und person2 gibt das commando an alle weiter, damit person3 auch mit person1 verbunden wird

    so, und wenn jemand auf person1 connectet wird das commando an die anderen wieder gegeben damit der dann auch mit allen schreiben kann
    und wenn jetzt person1 disconnectet sollen die anderen trotzdem miteinander schreiben

    das müsste eig. gehen, nur ich krieg es nichtmal bei nem server hin, das mehr wie 1 person connecten kann, wenn jemand eine idee hat würd ich mich freuen ^^

    P.S.: mir ist klar, dass das ganze sehr kompliziert wird!

    Mfg. PCKing


    Mein PC

    CPU: AMD FX 8350 8x4.00GHz
    Ram: 8GB DDR3
    Grafikkarte: Nvidia Geforce GTX 960 (4GB)
    Festplatten: 500GB SSD 1TB HDD
    Laufwerk: Blueray RW+ Brenner

  • Wie ich dir bereits geschrieben habe, geht es nicht ohne Host...

    Zusätzlich muss Port und IP gewusst werden und evtl. auch ne Weiterleitung eingerichtet werden, wenn man hinter dem Rooter sitzt...

  • dann erklärt mir villeicht jemand, wie ich mehrere leute auf einen server lassen kann? port ist 50

    Mfg. PCKing


    Mein PC

    CPU: AMD FX 8350 8x4.00GHz
    Ram: 8GB DDR3
    Grafikkarte: Nvidia Geforce GTX 960 (4GB)
    Festplatten: 500GB SSD 1TB HDD
    Laufwerk: Blueray RW+ Brenner

  • Für Host und Server geht es ungefähr gleich.
    Ich habe schon mit Blitzbasic ein Chat und ein Serverchat gebaut und habe gerade auch vor in Autoit ein Serverchat zu bauen also:
    beim Server musst du neue IP's die ankommen in eine Liste aufnehmen und jede Nachricht die reinkommt auch an jede IP schicken. Ich weiß jetzt nicht genau wie in Autoit das mit den IP's war aber so ungefähr läufts.
    Der Client muss dann immer nur an den Server schicken.

  • ich weiss zwar auch wie das mitn server abläuft, aber mit TCPAccept nehm ich ja eine ip an, nur wenn ich dann noch ein zweites TCPAccept in einer while schleife mach wird das erste nicht mehr angenommen, darum fragte ich ja auch wie ich mehr wie nur eine person auf dem server lasse

    Mfg. PCKing


    Mein PC

    CPU: AMD FX 8350 8x4.00GHz
    Ram: 8GB DDR3
    Grafikkarte: Nvidia Geforce GTX 960 (4GB)
    Festplatten: 500GB SSD 1TB HDD
    Laufwerk: Blueray RW+ Brenner

  • vielleicht hilft Dir das Beispiel aus dem engl. Forum:
    http://www.autoitscript.com/forum/index.php?showtopic=98820&view=findpost&p=710449

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • ich weiss zwar auch wie das mitn server abläuft, aber mit TCPAccept nehm ich ja eine ip an, nur wenn ich dann noch ein zweites TCPAccept in einer while schleife mach wird das erste nicht mehr angenommen, darum fragte ich ja auch wie ich mehr wie nur eine person auf dem server lasse

    Du kannst das ja natürlich nicht direkt als Schleife einbauen. Da muss noch ein bisschen dazu. Wenn dir der "englische" Server nicht weiterhilft, habe ich hier unten noch etwas aus der deutschen Hilfe kopiert. So, wie es im englischen Forum steht, ist das Sript natürlich wesentlich besser, aber evtl. nicht ganz so verständlich.

    Beispiel in der dt. Hilfe zum Befehl &quot;TCPRecv&quot;
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    ;==============================================
    ;==============================================
    ; SERVER!! Startet mich zuerst !!!!!!!!!!!!!!!
    ;==============================================
    ;==============================================

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

    Example()

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

    Func Example()
    ; Richte einige wiederverwendbare Informationen ein.
    ; Richte deine öffentliche IP Adresse (@IPAddress1) hier ein.
    ; Local $szServerPC = @ComputerName
    ; Local $szIPADDRESS = TCPNameToIP($szServerPC)
    Local $szIPADDRESS = @IPAddress1
    Local $nPORT = 33891
    Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
    Local $msg, $recv

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

    ; Startet den TCP Service
    ;==============================================
    TCPStartup()

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

    ; Erstellt einen lauschenden Port.
    ; Benutzt deine IP Adresse und den Port 33891. (Oben angegeben)
    ;==============================================
    $MainSocket = TCPListen($szIPADDRESS, $nPORT)

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

    ; Wenn die Socketerstellung fehl schlägt, dann wird das Programm beendet.
    If $MainSocket = -1 Then Exit

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

    ; Erstellt eine GUI für Messages.
    ;==============================================
    $GOOEY = GUICreate("Mein Server (IP: " & $szIPADDRESS & ")", 300, 200)
    $edit = GUICtrlCreateEdit("", 10, 10, 280, 180)
    GUISetState()

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

    ; Initialisiert eine Variable um eine Verbindung anzugeben
    ;==============================================
    $ConnectedSocket = -1

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

    ; Wartet auf und akzeptiert eine Verbindung
    ;==============================================
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

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

    ; Bekommt die IP des verbundenen Clients
    $szIP_Accepted = SocketToIP($ConnectedSocket)

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

    ; GUI Message Schleife
    ;==============================================
    While 1
    $msg = GUIGetMsg()

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

    ; GUI beendet
    ;--------------------
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop

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

    ; Versucht Daten zu empfangen, bis zu 2048 bytes
    ;----------------------------------------------------------------
    $recv = TCPRecv($ConnectedSocket, 2048)

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

    ; Wenn der Empfang mit @error fehlschlägt, dann hat sich der Socket getrennt.
    ;----------------------------------------------------------------
    If @error Then ExitLoop

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

    ; Aktualisiert das Input-Control mit dem, was wir empfangen haben.
    ;----------------------------------------------------------------
    If $recv <> "" Then GUICtrlSetData($edit, _
    $szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
    WEnd

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

    If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)

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

    TCPShutdown()
    EndFunc ;==>Example

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

    ; Funktion um die IP Adresse eines verbundenen Sockets wiederzugeben.
    ;----------------------------------------------------------------------
    Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet

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

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

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

    $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

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

    $sockaddr = 0

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

    Return $aRet
    EndFunc ;==>SocketToIP

    [/autoit]
  • Ich habe hier mal ein Beispiel für eine TCP Gesamt Chat Server geschrieben.Vlt Hilfts dir


    Spoiler anzeigen
    [autoit]


    TCPStartup()
    Global Const $IP = @IPAddress1
    Global Const $Port = 50

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

    $Socket = TCPListen($IP, $Port, 100)

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

    Dim $Verbindungen[100][2]

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

    For $x = 0 To UBound($Verbindungen) -1
    $Verbindungen[$x][0] = -1
    $Verbindungen[$x][1] = -1
    Next

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

    While 1
    For $x = 0 To UBound($Verbindungen) -1
    If $Verbindungen[$x][0] = -1 Then
    $Verbindungen[$x][0] = TCPAccept($Socket)
    If $Verbindungen <> -1 Then
    $Timer = TimerInit()
    Do
    $Resv = TCPRecv($Verbindungen[$x][0],1024)
    Until $Resv <> "" Or TimerDiff($Timer) >= 2000
    If $Resv <> "" Then
    $Verbindungen[$x][1] = $Resv
    Else
    TCPCloseSocket($Verbindungen[$x][0])
    $Verbindungen[$x][0] = -1
    $Verbindungen[$x][1] = -1
    EndIf
    EndIf
    EndIf
    $Resv = TCPRecv($Verbindungen[$x][0], 99999)
    If @error And $Verbindungen[$x][0] <> -1 Then
    TCPCloseSocket($Verbindungen[$x][0])
    $Verbindungen[$x][0] = -1
    $Verbindungen[$x][1] = -1
    EndIf
    If $Resv <> "" Then
    For $y = 0 To UBound($Verbindungen) -1
    If $Verbindungen[$y][0] <> -1 Then
    TCPSend($Verbindungen[$y][0], $Verbindungen[$x][1] & ":" & $Resv)
    EndIf
    Next
    EndIf
    Next
    WEnd

    [/autoit]