Я использую TTphClient Delphi в модуле sockets.pas для подключения к службе TCP.
Когда я пытаюсь получить ответ от службы TCP, я кодирую следующим образом:
var gap: integer;
T: TTCPClient;
B: TBytes;
i: integer;
begin
...
gap := 10;
SetLength(B, gap);
i := 0;
repeat
i := T.ReceiveBuf(B[i], gap);
if (i > 0) and (i < gap) then begin
SetLength(B, Length(B) - (gap - i));
Break;
end else if (i > 0) then begin
i := Length(B);
SetLength(B, i + gap);
end;
until i = 0;
...
end;
Я использую целочисленную переменную gap, чтобы контролировать размер буфера, считываемого из сокета.В этом примере разрыв составляет 10. Программа запустится без проблем, если размер приема не будет множителем разрыва (10).например, 4, 15, 29.
Однако программа будет зависать в ReceiveBuf, если буфер в сокете умножен на 10. Например: 10, 20, 30.
Как мне кодироватьс TTCPClient, чтобы он работал для любого возвращенного размера буфера, и моя программа не зависнет наполовину?
Я использую режим bmBlocking для этого клиентского сокета.
Спасибо.