Da Server (besonders unter AutoIt-Neulingen) immer wieder ein Problem darstellen,
und ich hier auch schon einige "seltsame" Konstruktionen gesehen habe,
wollte ich einfach mal zeigen, wie ich einen TCP Server programmieren würde:
Local $Server, $Client = -1, $Data ; die wichtigsten Variablen
TCPStartup() ; TCP starten
$Server = TCPListen(@IPAddress1, 1337) ; Server starten
If @error Then
; Information an den Benutzer ausgeben, dass der Server nicht gestartet werden konnte
TCPShutdown()
Exit
EndIf
Do
If ($Client > 0) Then ; überprüfen, ob schon ein Client verbunden ist
$Data = TCPRecv($Client, 1024) ; Daten vom Client empfangen
If @error Then ; Client nicht mehr verbunden
$Client = -1 ; $Client zurücksetzen
ElseIf (StringLen($Data) > 0) Then ; Client hat etwas gesendet
; Daten verarbeiten
TCPSend($Client, $Data) ; Antwort an den Client schicken
EndIf
Else ; noch kein Client verbunden
$Client = TCPAccept($Server) ; eingehende Verbindung akzeptieren
EndIf
; andere wichtige Sachen, zum Beispiel irgendwas um die Schleife zu beenden
Until False
TCPCloseSocket($Client) ; Verbindung zum Client trennen
TCPCloseSocket($Server) ; Server beenden
TCPShutdown() ; TCP beenden
Exit ; Skript beenden
Local $Server, $Client[100], $i, $Data ; die wichtigsten Variablen
For $i = 0 To 99
$Client[$i] = -1 ; -1 = nicht verbunden
Next
TCPStartup() ; TCP starten
$Server = TCPListen(@IPAddress1, 1337) ; Server starten
If @error Then
; Information an den Benutzer ausgeben, dass der Server nicht gestartet werden konnte
TCPShutdown()
Exit
EndIf
$i = 0 ; $i zurücksetzen
Do
If ($Client[$i] > 0) Then ; überprüfen, ob der Client schon verbunden ist
$Data = TCPRecv($Client[$i], 1024) ; Daten vom Client empfangen
If @error Then ; Client nicht mehr verbunden
$Client[$i] = -1 ; $Client zurücksetzen
ElseIf (StringLen($Data) > 0) Then ; Client hat etwas gesendet
; Daten verarbeiten
TCPSend($Client[$i], $Data) ; Antwort an den Client schicken
EndIf
Else ; Client noch nicht verbunden
$Client[$i] = TCPAccept($Server) ; eingehende Verbindung akzeptieren
EndIf
$i += 1 ; $i um 1 erhöhen, damit beim nächsten Durchlauf der Schleife der nächste Client verarbeitet werden kann
If ($i = UBound($Client)) Then $i = 0 ; nach dem letzten Client wieder von vorne beginnnen
; andere wichtige Sachen, zum Beispiel irgendwas um die Schleife zu beenden
Until False
TCPCloseSocket($Client) ; Verbindung zum Client trennen
TCPCloseSocket($Server) ; Server beenden
TCPShutdown() ; TCP beenden
Exit ; Skript beenden