怎样将TMemoryStream 读入到每64个字节读入到byte数组里面 ,按包传输。

Frewin 2006-03-10 02:39:39
我现在想将TmemoryStream按包传输。
ms := TmemoryStream.Create;
Jpg := Tjpegimage.Create;
Jpg.Assign(Image1.Picture.Graphic);
Jpg.SaveToStream(Ms);
Ms.Position := 0;
-- arraybye :array of byte;
将TMemoryStream 每64个字节读入到一个byte,如果这些byte是按包传输的,那么怎样用一个array of byte 接收所有发出的byte.
...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Frewin 2006-03-11
  • 打赏
  • 举报
回复
非常感谢:madyak(无天) 的热心帮助.
madyak 2006-03-10
  • 打赏
  • 举报
回复
一点一点调试吧,操作细节是需要自己调试才能做好的,除非这里有人和你做过一样的东西,能告诉你每一步操作.
Frewin 2006-03-10
  • 打赏
  • 举报
回复
可惜我是用串口发送的(mscomm),mscomm规定了InBufferSize和OutBufferSize,
madyak 2006-03-10
  • 打赏
  • 举报
回复
按64字节分可以用下面的方法
Ms.Position := 0;
while Ms.Size- Ms.Position>=64 do
begin
Ms.ReadBuffer(arraybye[0], 64);
Ms.Position:=Ms.Position+64;
//发送
end;
//如果最后有没有发出的数据,把尾巴发送出去,最后的可能不够64字节,你需要处理,可重设置数组的长度

UPD发送可能要快些,但存在丢包和乱序的情况
如果对速度要求不是很严格,可用TCP发送

接收端可以用内存流接收,如果非要数组接收,最好一开始能把数据的总长度传过去

如果工程存在大量不同种类的通读的情况,你可以考虑用结构(Record)来封装包,这样可以很方便的加入附加的信息
baiduan 2006-03-10
  • 打赏
  • 举报
回复
简单来说,
udp不用考虑包的漏发等问题,所以
每sendto一个buf的时候可以用2个字节的dword作为包的数据次序的校验,然后跟数据。
recvfrom的时候建立一个Tmemorystream,每次来包写一次,如果包次序变化用stream.
seek函数改变数据写位置。
tcp不用考虑包的次序,但要考虑包的漏发等等情况,
如果返回数据长度不是定长,就要考虑重新定位数据发送的位置了。
接受函数同样。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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