Tcp的粘包和半包问题及解决方案
目录
粘包:
半包:
应用进程如何解读字节流?如何解决粘包和半包问题?
①:固定长度
②:分隔符
③:固定长度字段存储内容的长度信息
粘包:
一次接收到多个消息,粘包
应用进程无法从一个粘包中解析出数据
出现粘包的原因:
①:发送方每次写入数据<内核缓冲区大小;导致多个小的数据包一次性放到一个缓冲区中一起发送了,接收端接收到数据就对导致粘包。
②:接收方读取内核缓冲区不够及时。Tcp接收数据的三个队列并不是实时的,有可能会延时,可能会导致读到多个消息,粘包了。
半包:
一个消息分多次接收,半包
应用进程无法从一个半包中解析出数据
出现半包的原因:
①:发送方写入数据>内核缓冲区大小;
②:发送方数据大小大于MTU,必须拆包。
应用进程是无法从一个粘包、半包中解析出数据的,根本原因是:Tcp是面向字节的,消息无边界的。
应用进程如何解读字节流?如何解决粘包和半包问题?
找出消息的边界
①:固定长度
简单、但是浪费空间,不推荐。
(比如规定每10个字节表示一个消息,但是客户端发送的一个消息里只有1个字节那么剩下的字节就是浪费的,需要补空或者补0)
②:分隔符

简单,空间也不浪费,推荐使用
缺点:数据内容本身出现分隔符时,需要转义,所以需要扫描内容
典型的例子就是HTTP报文:
③:固定长度字段存储内容的长度信息

接收端先解析固定字段,获取长度,然后根据长度读取数据内容。
可以精确定位数据内容,内容不需要转义,推荐
缺点:数据内容长度有限制,需要提前知道可能的最长的消息的字节数
相关文章:
Tcp的粘包和半包问题及解决方案
目录 粘包: 半包: 应用进程如何解读字节流?如何解决粘包和半包问题? ①:固定长度 ②:分隔符 ③:固定长度字段存储内容的长度信息 粘包: 一次接收到多个消息,粘包 应…...
路由的hash和history模式的区别
目录 ✅ 路由模式概述 一. 路由的hash和history模式的区别 1. hash模式 2. history模式 3. 两种模式对比 二. 如何获取页面的hash变化 ✅ 路由模式概述 单页应用是在移动互联时代诞生的,它的目标是不刷新整体页面,通过地址栏中的变化来决定内容区…...
CS5366+VL171母座正反插HDMI(CS5466也可搭配)国产芯片TYPEC方案设计 ASL电路原理图 集睿致远+威锋设计
VL171是威锋芯片,可搭配ASL集睿致远CS5366设计TypeC母座正反插转HDMI高清投屏方案,CS5366是2lane 芯片,支持4K60HZ,是CS5266的升级版,CS5366设计拓展坞方案可以替代CS5266携带快充100W的PD和US,多口HUB也不在话下,而画面的刷新率和…...
mxgraph的核心元素详谈
前言: MxGraph是一个流行的开源图形库,它提供了一stop solution for creating graphical representations of data。下面是MxGraph的核心源码讲解: 正文: Graph Structure(图结构): MxGraph将一个图表示为一个层次结构,由节点和边组成。节点表示图中的顶点,而边表示它…...
再探C++——默认成员函数
目录 一、构造函数 二、析构函数 三、赋值运算符 四、拷贝构造 如果一个类中没有成员,我们称为空类。空类,也存在6个默认的类成员函数。 默认成员函数:用户不显示地写,编译器会默认生成的函数叫做默认成员函数。 6个默认成员…...
推荐两款github敏感信息搜集工具(gsil、gshark)
推荐两款github敏感信息搜集工具(gsil、gshark) - 云社区 - 腾讯云 (tencent.com) github敏感信息泄露是很多企业时常忽视的一个问题,国外有一份研究报告显示,在超过24,000份的GitHub公开数据中,发现有数千个文件中可能…...
如何不拷贝资源的使用fork
我们知道fork出的子进程会把父线程的资源拷贝一遍,其中包括文件描述符表,如果是一些独占的设备,那么经常会出问题。 比如你在父进程ose了设备,但子进程的文件描述符表里依然记录是open的,这样当你再次在父进程open时&a…...
使用事件侦听器和 MATLAB GUI 查看 Simulink 信号研究
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
使用协程让物体颜色慢慢消失
以下是使用协程让物体颜色慢慢消失的完整代码,每行都有注释说明: using UnityEngine; using System.Collections;public class ExampleClass : MonoBehaviour {public SpriteRenderer sprite; // 物体的SpriteRenderer组件public float fadeSpeed 0.1f…...
服务器流量
1.服务器流量分为入流量和出流量 入流量(Inbound Traffic)是指流向服务器的数据流量,也就是客户端发送到服务器的数据。这些数据可能包括请求信息、文件上传等。 出流量(Outbound Traffic)是指从服务器流向客户端的数…...
加拿大量子研究新动作!D-Wave与滑铁卢大学合作研究量子相干性
(图片来源:网络) D-Wave是量子计算系统、软件和服务的领导者,也是量子计算机的第一家供应商。近期,D-Wave宣布与滑铁卢大学量子计算研究所(IQC)达成两项新合作。他们为量子计算系统建立了关键…...
网络安全进阶学习第十一课——MySQL手工注入(2)
文章目录 一、UA注入1、原理2、靶场演示:1)一旦页面出现如下现状,就可以使用UA注入2)BP抓包3)修改User-Agent 二、referer注入1、原理2、靶场演示:1)使用BP抓包2)修改Referer 三、DN…...
数据库和ORM如何优雅的添加字段?
RT,业务需要为某个实体添加字段,如何在生成了Mybatis XML(包含了手写的部分联合查询)的情况下优雅的添加字段呢? 作者:方小葱 链接:https://www.zhihu.com/question/284511416/answer/43812337…...
QT ubuntu下开发视频播放 FFmpeg
ubuntu 安装FFmpeg T113VideoDemo.pro #------------------------------------------------- # # Project created by QtCreator 2023-07-28T11:45:22 # #-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widget…...
8.3一日总结
1.远程仓库的使用 a.克隆远程仓库 1>.在桌面克隆远程仓库 git clone 仓库名 2>.修改仓库内容 3>添加目录 git add. 4>提交: git commit -m 完成登录功能 5>推送提交远程仓库 : git push origin master -u 6>更改推送:git push(简写形式) 需要先添加,再提交,最…...
load、unload和pagehide、pageshow
一、load、unload和pagehide、pageshow的主要应用 1)load 和 unload 事件监听web页面的进入和离开,一般用于页面的首次加载、刷新和关闭等操作的监听; 2)pageshow 和 pagehide 事件多用于监听浏览器的前进和后退等。 二、pagesh…...
【面试问题12】
1.吞吐量和并发区别? 并发请求树/单位时间一般是s 吞吐量 并发/平均响应时间 常用的吞吐量指标有qps,tps 2.mysql数据是怎么存储的? 存储在data目录下,数据库作为文件夹,文件夹里面有.ibd文件,一个表一个ib…...
高性能网络框架笔记
目录 TCP粘包、分包惊群断开连接,TCP怎么检测的?大量的close wait,如何解 ?双方同时调用close水平触发和边沿触发的区别 TCP粘包、分包 解决:1.应用层协议头前面pktlen;2.为每一个包加上分隔符;(\r\n&…...
leetcode 738. 单调递增的数字
2023.8.4 这题用暴力法会超时,我就没试了,采用了个挺巧的方法,为了方便需要先将整数n转换为字符串的形式,然后从后向前遍历,当两个数字非递增时,将前一个数字--,后一个数字的位置记录在index中&…...
FPGA项目设计:数字时钟
项目要求: 设计一个数字时钟,数码管前两位显示小时,数码管中间两位显示分钟,数码管后面两位显示秒。 项目设计: 系统框架图: 计数模块时序图: 代码实现: 计数模块: /…...
别再死记硬背C#语法了!用5个机器视觉小例子带你快速上手(Visual Studio 2022版)
用5个机器视觉小项目玩转C#语法(Visual Studio 2022实战) 刚接触C#的开发者常陷入语法记忆的泥潭,而机器视觉领域恰好需要快速验证想法的能力。本文将带你用Visual Studio 2022创建五个渐进式图像处理项目,在解决实际问题的过程中…...
GitHub新手避坑指南:从Fork到提交PR,手把手教你参与开源项目(含SSH配置全流程)
GitHub开源贡献实战:从零完成第一次PR的全流程解析 第一次参与开源项目就像踏入一个充满活力的开发者社区,既兴奋又忐忑。上周我帮助一位同事提交了他的首个GitHub PR,看着他成功合并代码时的那种成就感,让我决定写下这篇详尽的指…...
HarmonyOS在语文教学中的应用-6. 四色太阳画板
6. 四色太阳画板(对应:「4」 四个太阳) 功能介绍: 基于《四个太阳》的创意绘画工具。Canvas画布上默认画着一个太阳。学生可以通过调色盘选择“绿”(画春天的太阳)、“金黄”(画夏天的太阳)、“红”(画冬天的太阳)等颜色,为太阳填色。通过绘画操作,培养学生的想象…...
【HFP】规范精讲[22]: 蓝牙语音音质的度量衡——HFP质量指标体系深度解析与实战应用
在蓝牙语音设备的研发、生产和验收过程中,如何科学、准确地评估音质好坏?为什么同样支持HFP的耳机,有的通话清晰自然,有的却杂音明显、音量失衡?这背后离不开一套统一、规范的质量指标体系。HFP(Hands-Free…...
终极指南:使用icloudpd命令行工具轻松备份你的iCloud照片库
终极指南:使用icloudpd命令行工具轻松备份你的iCloud照片库 【免费下载链接】icloud_photos_downloader A command-line tool to download photos from iCloud 项目地址: https://gitcode.com/GitHub_Trending/ic/icloud_photos_downloader 你是否担心珍贵的…...
如何用Obsidian Projects实现知识管理的可视化革命?[特殊字符]
如何用Obsidian Projects实现知识管理的可视化革命?🚀 【免费下载链接】obsidian-projects Plain text project planning in Obsidian 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-projects 你是否曾为散落在各处的笔记而烦恼…...
Apache日志文件也能被黑?手把手教你复现access.log文件包含漏洞(DVWA靶场实战)
Apache日志文件的安全隐患:从记录工具到攻击载体的转变 在网络安全领域,最危险的漏洞往往隐藏在最不起眼的地方。Apache服务器的access.log日志文件,这个看似无害的系统记录工具,在特定条件下可能成为攻击者入侵系统的跳板。本文将…...
Arcgis数据统计实战:从基础汇总到高级分析的完整工具链解析
1. ArcGIS数据统计工具入门指南 第一次接触ArcGIS的数据统计功能时,我被属性表里密密麻麻的数字搞得头晕眼花。直到发现右键菜单里的【统计】功能,才真正体会到GIS数据分析的便捷性。这个不起眼的小功能,其实包含了最小值、最大值、平均值、标…...
EcomGPT电商大模型效果展示:AI将‘V领收腰显瘦’转化为英文SEO友好描述
EcomGPT电商大模型效果展示:AI将‘V领收腰显瘦’转化为英文SEO友好描述 你是否曾为将一件“V领收腰显瘦”的连衣裙,翻译成能让海外消费者一眼心动、同时符合亚马逊搜索习惯的英文标题而头疼?传统的直译往往生硬,丢失了营销的灵魂…...
终极Windows驱动签名绕过指南:3步解决硬件兼容性问题
终极Windows驱动签名绕过指南:3步解决硬件兼容性问题 【免费下载链接】DSEFix Windows x64 Driver Signature Enforcement Overrider 项目地址: https://gitcode.com/gh_mirrors/ds/DSEFix DSEFix是一款专为Windows x64系统设计的驱动签名强制覆盖工具&#…...
