免费网站建站app,东莞58同城招聘网,网站出现乱码怎么办,网站建设 算什么文章目录 为什么会产生粘包问题#xff1f;解决办法先发包大小再发包内容代码示例 为什么会产生粘包问题#xff1f;
tcp是数据流传输#xff0c;是一种没有边界的#xff0c;可以合并的传输数据方式。合并就要能拆开#xff0c;拆不开就是粘包。
解决办法 设置标志位解决办法先发包大小再发包内容代码示例 为什么会产生粘包问题
tcp是数据流传输是一种没有边界的可以合并的传输数据方式。合并就要能拆开拆不开就是粘包。
解决办法 设置标志位起始/结束标志位 缺点数据可能和标志位重合导致错误拆包 适用场景适合用户可输入的内容比较有限比较固定的情况 固定包大小 缺点容易浪费空间和资源 适用场景适合每次发的大小基本是固定的 先发数据长度然后再发数据包 缺点每次会多发一个包浪费空间 适用场景比较通用 短连接 缺点浪费时间和资源 适用场景适合网页浏览
先发包大小再发包内容代码示例
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;