2010-09-02 22 views
0

主機:127.00.0.1; port:5001; ReadTimeout:3000;Delphi Indy10:IdTCPClient如何獲取服務器的響應,並且響應的長度未知

//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其他操作的部分不會被執行。任何想法contionu代碼?謝謝。

回答

2

如果ReadTimeout消逝,ReadChar()會引發一個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; 
//.... 
+0

很好!謝謝 – Jeason 2010-09-13 05:57:15