我是靠谱客的博主 高大巨人,最近开发中收集的这篇文章主要介绍TCP接收图片处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 拆包的情况
    • 粘包、拆包发生原因
    • 粘包、拆包解决办法
    • 尝试 粘包
    • 面试必备:怎么处理 粘包

拆包的情况

在这里插入图片描述

问题:串口发送图片文件,字节大小为10097,tcp接收端,分成了许多包,需要把这些HEX 二进制字符串组包, 所以引出的问题:
1、怎么组包
2、几种方法组包

在这里插入图片描述

粘包、拆包发生原因

粘包、拆包发生原因
    发生TCP粘包或拆包有很多原因,现列出常见的几点,可能不全面,欢迎补充,

    1、要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。

    2、待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。

    3、要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。

    4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。

粘包、拆包解决办法

通过以上分析,我们清楚了粘包或拆包发生的原因,那么如何解决这个问题呢?解决问题的关键在于如何给每个数据包添加边界信息,常用的方法有如下几个:

1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。

2、发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。

3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。

等等。

尝试 粘包

1、发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。

面试必备:怎么处理 粘包

假设有人问你“怎么处理粘包?”时,他想问的是什么?

难道对方不知道tcp是流,不知道网络协议是怎么写的吗?对方当然知道。对方想问的其实是“你在使用tcp时,怎么处理消息边界”。但是“粘包”这两个字言简意赅,使用范围广,为何不用呢。

实际开发中,别人问你,诶你这个for+switch干啥用的?你回答“处理粘包的”直接就表述清楚了;回答“处理网络报文消息边界的”,那恐怕对方觉得你在装逼。

最后

以上就是高大巨人为你收集整理的TCP接收图片处理的全部内容,希望文章能够帮你解决TCP接收图片处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部