【Kalibu】: 多谢解答! 请问那个包头THeader是自己定义的么?是不是要像你例举的Theader那样根据自己报文的协议定义这么一个record,每次先读包头,然后从包头里找出长度再读到我要的缓冲区里? 我现在的程序是: procedure TTCP_Client.IdTCPServerExecute(AThread: TIdPeerThread); var connected: boolean; aIn:array[0..2047] of Byte; i,ilen: integer; begin connected:= true; for i:=0 to 2047 do aIn[i]:=0; AThread.Connection.ReadFromStack; ilen := AThread.Connection.InputBuffer.Size;
if ilen<>0 then begin AThread.Connection.ReadBuffer(aIn,ilen); end; end; 这种根据AThread.Connection.InputBuffer.Size来读是不是不对? 另外在这个IdTCPServerExecute在ReadBuffer之前还要作其他动作么?我查help里的ReadBuffer他说要用ReadFromStack从而保证读到的buufer里至少有已经定义的size长度的数据,可是我用了上面写的程序很容易死在那里,出现错误,是不是我的用法还是不对呢?