大侠们好,初次写数据接收的代码,不知道下面的代码运行有没有漏洞,我测试是没什么问题。如有问题,请大侠帮忙改正一下,谢谢procedure Tfrmmain.TcpServerAccept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  RCount: integer;
  Rbuf: array[0..8191] of Byte;
  Buf:TMemoryStream;
begin
  try
  Buf := TMemoryStream.Create;
   {开始接收}
    while ClientSocket.Connected do
      if ClientSocket.WaitForData(5000) then //如果5秒钟没有数据到来,则断开
      begin
        RCount := ClientSocket.ReceiveBuf(Rbuf, 8192);
        Buf.WriteBuffer(Rbuf, RCount);
        if RCount <= 0 then
          ClientSocket.Disconnect;
      end else ClientSocket.Disconnect;//
    {接收完毕}
   finally
    Buf.Free;
   end;
end;  TTcpServer采用bmThreadBlocking模式时,在OnAccept事件中使用while循环检查ClientSocket.Connected属性来判断连接是否可用是有问题的,但客户端断开时,此属性还是true。 此时唯一的区别是ClientSocket.WaitForData(5000)方法可以立即返回失败而不会有等待超时。 
无奈,我只能以此来关闭。 不知道是不是我的用法有问题,这里请教各位。