(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 的结构? 望高手指点迷津!
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 的结构? 望高手指点迷津!
不要在ClientSocketRead时间里面处理这个record,
而是应该通过判断缓存里面数据是否完整,之后在来处理缓存里面的内容。
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