TCP发送数据的时候出现错误

qq_42011501 2018-12-05 08:25:43
再用客户端发送数据的时候,是按照不缓冲直接发送的方式,一次发送50个字节的数据,一秒发送两个数据,做了一个实验,我计数发送100个数据,发现,有10个左右的数据被分成了两包数据发送,其他的正常发送,这是怎么一回事?
...全文
980 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
无名小卒~ 2019-01-07
  • 打赏
  • 举报
回复
还有可以协议包头包尾是固定数据,用类似于内核的环形缓冲区来处理数据。如果需要应答的话性能会降低,不如使用udp+手动应答,效率最高。或者直接使用sctp,达到报文完整性和应答的效果
cs十七 2019-01-06
  • 打赏
  • 举报
回复
楼上已经回答了,面向流的协议,所以我们调用完 发送函数后,下层操作系统 怎么发送出去、TCP怎么分节、IP怎么分包,好像都不是确定的。 这个帖子里有关于分包、粘包的介绍。 https://bbs.csdn.net/topics/392478751 https://bbs.csdn.net/topics/380167545
haisan000 2019-01-06
  • 打赏
  • 举报
回复
应该没办法决定底层则么发送数据报. 往下这个归于物理层和数据链路层, 不好干预传输方式 , 就算干预也只是修改数据而已
1.我一般是固定定义8个字节长度头(可以加上校验信息之类),先发送这8个字节长度,接收端先接收这8个字节,然后根据这个长度进行发送接收.
2.每个包加个校验码或者特殊信息,收到后进行校验码验证.

这样做的好处:
1.节约网络(当然可以进一步进行解压缩,牺牲传输速度和性能等)
2.每个包都可以保证自己想要的精确信息


经过很长时间实践,效果还可以
诺水城子 2019-01-03
  • 打赏
  • 举报
回复
TCP是面向数据流的,分包、粘包都是正常现象,

一般有3种解决方案:

(1)发送固定长度的消息

(2)把消息的尺寸与消息一块发送

(3)使用特殊标记来区分消息间隔
  • 打赏
  • 举报
回复
引用 2 楼 qq_42011501 的回复:
具体要怎么实现呢
这块我感觉得是你服务端处理,报文得收全,一次看没收完,得继续收。
qq_42011501 2018-12-12
  • 打赏
  • 举报
回复
引用 6 楼 Miles-Meng 的回复:
这很正常啊,TCP是面向数据流的
有什么方法解决这个呢
mz454619501 2018-12-11
  • 打赏
  • 举报
回复
这很正常啊,TCP是面向数据流的
qq_42011501 2018-12-08
  • 打赏
  • 举报
回复
引用 4 楼 LubinLew 的回复:
ethtool -K eth0 tso off


可以具体说说嘛 我发送端是用的手机 一直再发送数据
LubinLew 2018-12-07
  • 打赏
  • 举报
回复
ethtool -K eth0 tso off
qq_42011501 2018-12-06
  • 打赏
  • 举报
回复
具体要怎么实现呢
  • 打赏
  • 举报
回复
出现这种情况,有可能是网卡的tso给分片了

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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