Hi,
ich versuche grade einen TCP Multiclient Server zu erstellen. Jedoch wenn ich versuche überflüssige/nich verbundene Clients zu löschen dann bekomme ich eine Fehler weil die Zahl in der For schleife nicht mehr passt.
Hier mal mein Server
#include<array.au3>
[/autoit] [autoit][/autoit] [autoit]Dim $aClients[1] = [0]
Global $sIP = "127.0.0.1", $iPort = 1337, $iMainSocket
TCPStartup()
$iMainSocket = TCPListen($sIP, $iPort)
While 1
_AcceptClients($aClients)
_DeleteClients($aClients)
If $aClients[0] > 0 Then
;hier kommt der chat rein
EndIf
WEnd
Func _DeleteClients(ByRef $aClients)
For $i=1 to $aClients[0]
TCPSend($aClients[$i], "[/Ping]"&@CRLF &@CRLF)
$hTimer=TimerInit()
Do
$sRecv=TCPRecv($aClients[$i], 1)
If TimerDiff($hTimer)>600 Then
_ArrayDelete($aClients, $i)
$aClients[0]-=1
;~ _ArrayDisplay($aClients)
ConsoleWrite("Client gelöscht"&@CRLF)
ContinueLoop 2
EndIf
Until $sRecv<>""
Do
$sRecv &= TCPRecv($aClients[$i], 1)
Until @error or StringInStr($sRecv, "[/Pong]")
Next
EndFunc
Func _AcceptClients(ByRef $aClients)
$iTempClient = TCPAccept($iMainSocket)
If $iTempClient <> -1 Then
_ArrayAdd($aClients, $iTempClient)
$aClients[0] += 1
TCPSend($iTempClient, "[Console]Connected[/Console]"&@CRLF &@CRLF)
ConsoleWrite("Client hinzugefügt"&@CRLF)
;~ _ArrayDisplay($aClients)
EndIf
EndFunc ;==>_AcceptClients
Wenn jetzt in der Funktion _DeleteClients() ein Client rausgeschmissen wird dann setzt ich $aClients[0] um eine Zahl herunter jedoch versucht die For schleife in Zeile 21 immernoch bis zum Wert zu laufen den die Variable $aClients[0] zuvor hatte.
Ich hoffe ihr habt Rat für mich