socket 怎么解决发送长字符串被截断 ?求源码

setups 2008-03-01 08:33:07
socket 怎么解决发送长字符串被截断 ?求源码
...全文
1236 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hayukleung 2012-09-06
  • 打赏
  • 举报
回复
楼主,socket不会截断长字符串的,只要你的send函数发送的长度比你的消息长就行,到了接收端recv函数的接收长度比消息长,那么你就可以成功接受到你的消息,至于网络上的1460字节的限制,那是网络层的事情,我们在写socket时用stream型或dgram型(即非raw型),是在传输层,根据tcp/ip分层的原理,传输层上干的事情不必理会底层网络层的处理细节。

[Quote=引用楼主 的回复:]
socket 怎么解决发送长字符串被截断 ?求源码
[/Quote]
ffwin 2012-09-06
  • 打赏
  • 举报
回复
按字节数组发,不要发字符串
hayukleung 2012-09-06
  • 打赏
  • 举报
回复
我觉得楼主的意思不是指你说的分包情况,而是指发送字符串时由于遇到'\0',字符串只成功发送第一节,其余部分被丢弃了......
[Quote=引用 4 楼 的回复:]

无法解决, 这是由以太网帧的结构所决定了的。

Ethernet II帧中数据区最长为1500字节, 如果用来传送TCP数据包,则在TCP封装时,TCP报文头将占去20个字节。接着是IP封装,IP报文头至少20个字节,这样一来,一个Ethernet II帧中使用TCP协议可传送的数据最多只有1460字节了。

超过这个长度的连续数据,都将被拆解为多个数据包分开发送。
[/Quote]
jadeluo 2008-03-01
  • 打赏
  • 举报
回复
无法解决, 这是由以太网帧的结构所决定了的。

Ethernet II帧中数据区最长为1500字节, 如果用来传送TCP数据包,则在TCP封装时,TCP报文头将占去20个字节。接着是IP封装,IP报文头至少20个字节,这样一来,一个Ethernet II帧中使用TCP协议可传送的数据最多只有1460字节了。

超过这个长度的连续数据,都将被拆解为多个数据包分开发送。
god_knows_me 2008-03-01
  • 打赏
  • 举报
回复
我不会Delphi,一直在用C++ biulder
setups 2008-03-01
  • 打赏
  • 举报
回复
能不能帖个具体源码!不太明白 ,新手!谢谢
god_knows_me 2008-03-01
  • 打赏
  • 举报
回复
不要转换成字符串就可以
发送用Write()
接收使用ReadBytes()

1,594

社区成员

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

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