0

主机: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;
//....

当timerout时,其他操作的部分将不会被执行。有什么想法可以继续代码吗?谢谢。

4

1 回答 1

2

EIdReadTimeout如果 ReadTimeout 过去,ReadChar() 将引发异常。您需要使用 try/except 块来捕获它,例如:

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; 
//.... 
于 2010-09-02T22:17:07.500 回答