Wird dies in der Liste lb_Clients.Items[x] exakt nachgeführt sollten die Connections und die Items übereinstimmen.
Wenn aber ein Client von sich aus die
TCP-Verbindung schliest oder die Verbindung zum Client unterbochen werden sollte, dann passen die beiden Listen nicht mehr zusammen.
So wie Sir Rufo das gezeigt hat ist es schon besser, aber immer noch nicht ganz wasserdicht.
Könnte ja sein, dass das die Verbindung schon weg ist und dann würde lb_Clients.Items.Objects[i] auf ein
freigegebenes Objekt zeigen:
Delphi-Quellcode:
// ungetestet
var
SelectedSocket : TCustomWinSocket;
...
if lb_Clients.Selected[i] then
begin
SelectedSocket := TCustomWinSocket(lb_Clients.Items.Objects[i]);
// schauen, ob SelectedSocket noch in der Liste ist
for j:= 0 to ServerSocket.Socket.ConnectionCount-1 do
begin
if SelectedSocket=ServerSocket.Socket.Connections[j] then
begin
SelectedSocket.close;
break;
end;
end;
lb_Clients.Items.Delete(i);
end;