Delphi Indy10:IdTCPClient如何获取Server的响应,且响应长度未知
主机:127.00.0.1; 端口:5001; 读取超时:3000;
//Following codes to get the response
procedure TForm1.Button2Click(Sender: TObject);
var
s:string;
begin
try
while True do
begin
s := s+IdTCPClient1.IOHandler.ReadChar();
end;
finally
showmessage(s);
....other operations...
end;
//....
当超时时,其他操作的一部分将不会被执行。有什么想法可以继续代码吗?谢谢。
host:127.00.0.1;
port:5001;
ReadTimeout:3000;
//Following codes to get the response
procedure TForm1.Button2Click(Sender: TObject);
var
s:string;
begin
try
while True do
begin
s := s+IdTCPClient1.IOHandler.ReadChar();
end;
finally
showmessage(s);
....other operations...
end;
//....
When timerout the part of other operations will not be excuted.Any ideas to contionu the code?Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果 ReadTimeout 超时,ReadChar() 将引发
EIdReadTimeout
异常。您需要使用 try/ except 块来捕获它,例如:更好的选择是根本不在循环中调用 ReadChar() 。请改用 IOHandler 的 CheckForDataOnSource() 和 InputBufferAsString() 方法,例如:
ReadChar() will raise an
EIdReadTimeout
exception if the ReadTimeout elapses. You need to use a try/except block to catch that, eg:A better option is to not call ReadChar() in a loop at all. Use the IOHandler's CheckForDataOnSource() and InputBufferAsString() methods instead, eg: