Тут все просто - нужно ждать. Ваш код работает корректно только в идеальных условиях. Но если вторая сторона не ответила мгновенно, то вы уже ничего не получите.
Перед отправкой/получением вам надо проверить наличие соединения функцией FTCPClient.IOHandler.CheckForDisconnect() - при отсутствии соединения она сгенерит исключение:
try
FTCPClient.IOHandler.CheckForDisconnect();
except
on E: EIdException do
begin
LogError('TUTM5StreamProtocol.Run CheckForDisconnect ERROR ' + E.Message);
Reconnect();
end;
end;
Читать с ожиданием данных можно несколькими способами:
1. Задавать FTCPClient.IOHandler.ReadTimeout в надежде что в отведенное время что то придет.
2. Использовать FTCPClient.IOHandler.ReadLnWait() для чтения строки.
3. Или обрабатывать проверять наличие данных и читать по мере их поступления:
if FTCPClient.IOHandler.CheckForDataOnSource(FConnectParams.Timeouts.TCPReadTimeout) then
читаем....