procedure TfrmMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
  strPLen: string;
begin
  SetLength(strPLen,100);
  AThread.Connection.ReadBuffer(PChar(strPLen)^, 100);
   ...............
end;
ReadBuffer时,若长度小于包实际长度,将出于阻塞状态。
此时:我想AThread.Connection.Disconnect。
请问如何处理。

解决方案 »

  1.   

    我说错了:应该是
    ReadBuffer时,若长度大于包实际长度,将出于阻塞状态。
      

  2.   

    先用AThread.Connection.ReadFromStack获取发送过来的字节数
    根据这个大小去设置接收缓冲
      

  3.   

    procedure TfrmMain.IdTCPServerExecute(AThread: TIdPeerThread); 
    var 
      strPLen: string; 
      size:integer;
    begin 
      size:=AThread.Connection.ReadInteger;//先读出发送过来的数据大小
      SetLength(strPLen,size);//设置数据大小 
      AThread.Connection.ReadBuffer(PChar(strPLen)^, size);//这样就可以了 
      ............... 
    end; 不过要应该上面给出的代码,前提是发送端必须先发送数据大小,再发送数据
      

  4.   

    IdTCPClient1.CurrentReadBuffer收到多少,读出来多少,多好