【计算机网络】 粘包问题

文章目录

为什么会产生粘包问题?

tcp是数据流传输,是一种没有边界的,可以合并的传输数据方式。合并就要能拆开,拆不开就是粘包。

解决办法

  1. 设置标志位(起始/结束标志位)

    缺点:数据可能和标志位重合,导致错误拆包

    适用场景:适合用户可输入的内容比较有限比较固定的情况

  2. 固定包大小

    缺点:容易浪费空间和资源

    适用场景:适合每次发的大小基本是固定的

  3. 先发数据长度,然后再发数据包

    缺点:每次会多发一个包,浪费空间

    适用场景:比较通用

  4. 短连接

    缺点:浪费时间和资源

    适用场景:适合网页浏览

先发包大小再发包内容代码示例

cpp 复制代码
struct Node n1;
int nSize = sizeof(n1);
//发送
send(sockClient,(char*)&nSize,sizeof(int),0);//先发包大小
send(sockClient,(char*)&n1,sizeof(n1),0);//发数据包
//接收
int nPackSize = 0;
recv(sockClient,(char*)&nPackSize,sizeof(int),0);//先接收包大小
char* buf = new char[nPackSize];
recv(sockClient,(char*)&buf,nPackSize,0);//再接收包
//回收空间
delete[] buf;
相关推荐
边啵儿1 天前
如何确定某个路由器的路由表?(计算机网络)
网络·计算机网络
Amo Xiang1 天前
计算机网络第3章(上):数据链路层全解析——组帧、差错控制与信道效率
计算机网络·数据链路层
安全系统学习2 天前
网络安全之框架安全漏洞分析
开发语言·python·计算机网络·web安全·网络安全
ArabySide2 天前
【JavaScript】 HTTP Cookie 核心知识梳理与常用的封装实现
javascript·计算机网络·http·web
DjangoJason2 天前
计算机网络 : 传输层协议UDP与TCP
tcp/ip·计算机网络·udp
勤奋的小王同学~2 天前
计算机网络:认证和授权 DNS 域名解析过程(如何转换为ip地址) http无状态 5**服务端错误相关的响应状态码 tcp某次握手丢失会有什么现象?
运维·服务器·计算机网络
爆更小小刘3 天前
3.3.1_2 检错编码(循环冗余校验码)
计算机网络
黎茗Dawn3 天前
6.计算机网络核心知识点精要手册
计算机网络
cleble5 天前
(转)什么是DockerCompose?它有什么作用?
计算机网络
IT葛大侠5 天前
OSPF域内路由
运维·网络·计算机网络