关于idtcp ReadBuffer 的问题

wealsh 2009-03-12 10:21:03
type
Tmydata = packed record
Size:Word;
Buf:array [0..30*15*5] of Byte;
end;

mydata:Tmydata

发送端:
idtcpclient1.write('s'+#13+#10);
idtcpclient1.writebuffer(mydata,mydata.size+2,true) ;
接收端:
AThread.Connection.ReadBuffer(mydata.size,2);
AThread.Connection.ReadBuffer(mydata.Buf,mydata.Size);

问题:发送与接收都没问题,只是不明白那个2表示什么意思?为什么要加上2?谢谢。
...全文
124 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
火星牛 2009-03-23
  • 打赏
  • 举报
回复
同意jadeluo
Channels_net 2009-03-17
  • 打赏
  • 举报
回复
ReadBuffer
表示要读到 2 个字节才算完 否则陷入 while 循环。
procedure TIdTCPConnection.ReadBuffer(var ABuffer; const AByteCount: Integer);
begin
if (AByteCount > 0) and (@ABuffer <> nil) then begin
// Read from stack until we have enough data
while (InputBuffer.Size < AByteCount) do begin
ReadFromStack;
CheckForDisconnect(True, True);
end;
// Copy it to the callers buffer
Move(InputBuffer.Memory^, ABuffer, AByteCount);
// Remove used data from buffer
InputBuffer.Remove(AByteCount);
end;
end;
HeroicDragon 2009-03-12
  • 打赏
  • 举报
回复
你去掉也是对的。
jadeluo 2009-03-12
  • 打赏
  • 举报
回复
type
Tmydata = packed record
Size:Word;
Buf:array [0..30*15*5] of Byte;
end;

idtcpclient1.writebuffer(mydata,mydata.size+2,true);

这里的mydata是Tmydata记录类型, 它由两个记录域组成的, 即Size:Word 和 Buf:array [0..30*15*5] of Byte;

其中Size记录域中保存的值是Buf中实际的数据字节数。

在发送的时候, 需要发送的总字节数是 Size的值(Word类型, 2个字节)和Buf中的数据(Size个字节), 即 mydata.size + 2

类似的,接收时,先接收Size记录哉的值,Word类型,2个字节: ReadBuffer(mydata.size,2);
然后接收Buf的内容,为Size个字节: ReadBuffer(mydata.Buf,mydata.Size);


1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧