如何知道TIdTCPServer接收数据是已经接收完毕?
我在 Execute 事件中结束数据,一个一个字节的接收,存在RecBuffer.Buffer中,如何判断缓冲区中的数据已经全部接收完毕呢?
代码如下:
procedure TfrmMainform.idServerExecute(AThread: TIdPeerThread);
var
  buf : array [0..1] of BYTE;
begin
  AThread.Connection.CheckForGracefulDisconnect(true);
  if (not AThread.Terminated) and (AThread.Connection.Connected) then
  begin
    with AThread.Connection do
    begin
      ReadBuffer(buf,1);
      if (RecBuffer.BufferLen + 1) < MAXBUFFERLEN then
        RecBuffer.Buffer[RecBuffer.BufferLen] := Buf[0];
      Inc(RecBuffer.BufferLen);
    end;
  end;
end;谢了!!!

解决方案 »

  1.   

    发送完就断开,或者先发送Buffer的大小。
      

  2.   

    可以先发一个buffer的大小,接收后比较大小,判断是否结束
      

  3.   

    直接用AThread.Connection.CurrentReadBuffer
      

  4.   

    我只做Server端,与协议无关,与Client无关,不能加任何标志得!
    还有其他得办法吗?
      

  5.   

    不知道从哪里来的Client也不知道发的什么数据,你去撞墙吧……
      

  6.   

    TCP只提供流服务,不提供同步服务,楼主确实该去撞墙.
      

  7.   

    需要定义结束标记或断开连接为标记
    或预先指定大小http://lysoft.7u7.net
      

  8.   

    halfdream(哈欠)TCP只提供流服务,不提供同步服务,楼主确实该去撞墙.能说说其中的奥妙吗,或者贴些资料。小弟愿洗耳恭听。相信也有很多人想听吧。