@AlBo:
Wenn der Server auf 100% Last geht, wenn der Client sich abmeldet liegt es
daran das der Client sich nicht "sauber" abmeldet.
Der
Indy-Server ist da etwas penibel, am besten der Client schickt ein "Quit" Signal und danach trennen
Server und Client beide die Verbindung.
Zusätzlich sollte im Server.OnExecute noch mit Check eingebaut werden:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
begin
// Prüfen ob Daten für die Verbindung vorhanden sind, dabei wird Status der Verbindung ebenfalls überprüft
AContext.Connection.Socket.CheckForDataOnSource(500);
// WEnn keine Daten vorhanden dann raus hier
if AContext.Connection.Socket.InputBufferIsEmpty then exit;
// Daten kommen jetzt wie gewohnt verarbeiten ...
end;
So bekommt der Server auch mit falls sich ein Client "unsauber" (z.B. WLAN Signal weg) abmeldet.
Trotzdem gehört so einem "sauberen" Protokoll ein "Quit" Signal.
[Edit]:
Wo wird den beim Server Deine Variable Lauf auf False gesetzt ?
OnExecute wird innerhalb eines Threads OnExecute ausgeführt und tritt immer wieder ein,
Da brauch/sollte eigentlich keine Schleife rein
Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.