Sie können die Kunde POLL für das Trennen der Verbindung durch Hinzufügen einer Timer-Routine zur Kunde - Dies ist der einfachste Weg.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
idTCPClient1.Connected; // Works in Indy for Delphi XE4
// Be aware this is a property read with side effects
// It shouldn't get optimized out, but if it does,
// then add the appropriate directives to prevent that.
end;
Dadurch sollte sich der Code genauso verhalten wie der alte TClientSocket (und wie das TidTelnet). Er erzeugt ein hsDisconnected-Flag für das OnStatus-Ereignis, wenn der Server plötzlich verschwindet (d.h. sobald die feuernde Timer-Routine dies erkennt). Allerdings wird in diesem speziellen Fall des Serververlusts, der die Trennung der Verbindung verursacht, NICHT das OnDisconnect-Ereignis ausgelöst, sondern nur das OnStatus-Ereignis. Daher ist es wahrscheinlich besser, immer OnStatus zu verwenden, um alle Verbindungsabbrüche zu erfassen, unabhängig davon, ob sie vom Client oder vom Server verursacht wurden. Ich habe einen auf 100ms eingestellten Timer verwendet, aber ich denke, man kann ihn so häufig oder langsam machen, wie man will - es scheint keinen Schaden anzurichten.
HINWEIS: Bei DELPHI 7 (und möglicherweise anderen Versionen zwischen D7 und XE4) müssen Sie dies etwas anders machen:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
// This no longer works this way in Indy for XE4, but works in Indy for D7 ...
idTCPClient1.CheckForGracefulDisconnect(FALSE);
end;
Übrigens - wenn Sie Delphi 6 verwenden, vergessen Sie Indy, es war damals einfach viel zu fehlerhaft.