【问题标题】:Delphi Indy10: How IdTCPClient gets the response of Server,and the length of response is unknownDelphi Indy10:IdTCPClient如何获取Server的响应,响应的长度未知
【发布时间】:2010-09-02 07:32:08
【问题描述】:

主机: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时,其他操作的部分将不会被执行。有什么想法可以继续代码吗?谢谢。

【问题讨论】:

    标签: delphi delphi-2010 indy10


    【解决方案1】:

    ReadChar() 如果 ReadTimeout 过去,将引发EIdReadTimeout 异常。您需要使用 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; 
    //.... 
    

    【讨论】:

      猜你喜欢
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 2013-12-02
      • 2013-12-01
      相关资源
      最近更新 更多