ReadChar () вызовет исключение EIdReadTimeout
, если истечет ReadTimeout. Вам нужно использовать блок try / Кроме того, чтобы поймать это, например:
procedure TForm1.Button2Click(Sender: TObject);
var
s: string;
begin
try
repeat
try
s := s + IdTCPClient1.IOHandler.ReadChar();
except
on E: EIdReadTimeout do Break;
end;
until False;
finally
ShowMessage(s);
...
end;
//....
Лучший вариант - вообще не вызывать ReadChar () в цикле. Вместо этого используйте методы IOHandler CheckForDataOnSource () и InputBufferAsString (), например:
procedure TForm1.Button2Click(Sender: TObject);
var
s: string;
begin
try
while IdTCPClient1.IOHandler.CheckForDataOnSource(IdTimeoutDefault) do begin end;
finally
s := IdTCPClient1.IOHandler.InputBufferAsString;
ShowMessage(s);
...
end;
//....