(Server 和 Client 都定义了 record 类型)
type TRec = packed record
      mTitle : string[10];
      mSize : integer;
      mArray : array[0..2] of string[10];
end;var mRec : TRec;
-------------------------------Server 端:
===========
ServerSocket1.Socket.Connections[0].SendBuf(mRec, sizeof(mRec));Client 端:
==========
Socket.ReceiveBuf(mRec, Socket.ReceiveLength);>>
>>问题: 当 Server 端发送的 mRec 大小超过8k时, Client 端 将会触发多次 ClientSocket1Read 事件. 我该如何正确接收这个超过 8K 的结构? 望高手指点迷津!

解决方案 »

  1.   

    建立一个缓存,把接收的内容都放入队列。
    不要在ClientSocketRead时间里面处理这个record,
    而是应该通过判断缓存里面数据是否完整,之后在来处理缓存里面的内容。
      

  2.   

    谢谢 pazee 回答. 那我如何将缓存中的内容转成 record 呢?
      

  3.   

    用 moveMemory , CopyMemory, 或 TmemoryStream 都可以达到
      

  4.   

    var
      mBuf: array[0..1] of char;
      mGBuf:array[0..1024] of char;
    -----------------------------------
    接收:
    ------
    MsgEnd := false;
    repeat
       iLen := Socket.ReceiveBuf(mBuf, 1);
       if (iLen <= 0) then MsgEnd := true
       else
       begin
         mGBuf[_i] := mBuf[0];
         inc(_i);
       end;
    until (MsgEnd);> 问: (aiirii), 当接收完所有内容, 如何将 mGBuf 转成 record
      

  5.   

    把buf中完整地记录段拷贝到你的record里面就行了