当前位置: 首页 > news >正文

【计算机网络】 粘包问题

文章目录

    • 为什么会产生粘包问题?
    • 解决办法
    • 先发包大小再发包内容代码示例

为什么会产生粘包问题?

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

解决办法

  1. 设置标志位(起始/结束标志位)
    缺点:数据可能和标志位重合,导致错误拆包
    适用场景:适合用户可输入的内容比较有限比较固定的情况

  2. 固定包大小
    缺点:容易浪费空间和资源
    适用场景:适合每次发的大小基本是固定的

  3. 先发数据长度,然后再发数据包
    缺点:每次会多发一个包,浪费空间
    适用场景:比较通用

  4. 短连接
    缺点:浪费时间和资源
    适用场景:适合网页浏览

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

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;
http://www.lryc.cn/news/167785.html

相关文章:

  • valgrind massif 详解(内存分配释放分析)
  • 使用命令行创建一个vue项目卡住不动如何解决
  • 七天学会C语言-第一天(C语言基本语句)
  • vue项目部署,出现两个ip的原因
  • 无涯教程-JavaScript - ASIN函数
  • MYSQL的SQL优化
  • lintcode 553 · 炸弹袭击【中等 数组+bfs+模拟】
  • 第一章 计算机系统概述 八、虚拟机
  • 桶装水送水多水站送水员公众号h5开发
  • 【JavaEE】多线程(二)
  • OkHttp 根据服务器返回的的过期时间设置缓存
  • 智能远程监考方案助力企业考试化繁为简
  • 基于matlab实现的额 BP神经网络电力系统短期负荷预测未来(对比+误差)完整程序分享
  • WPF的_Expander控件
  • 【MT7628AN】IOT | MT7628AN OpenWRT开发与学习
  • 基于Matlab实现自动泊车(垂直泊车)
  • 笔试面试相关记录(4)
  • unity UDP 通信
  • 一篇解决JavaScript
  • Unity UGUI(一)基础组件
  • 【微服务】六. Nacos配置管理
  • 【华为云云耀云服务器L实例评测|云原生】自定制轻量化表单Docker快速部署云耀云服务器
  • 无涯教程-JavaScript - ACOTH函数
  • Qt QTreeWidge解决setItemWidget后,导致复选框失效
  • strncpy
  • c++学习【23】matlab实现FOC算法
  • 2020-2023中国高等级自动驾驶产业发展趋势研究-概念界定
  • ICPC 2022 网络赛 h (模拟
  • 如何保护您的工业网络?
  • Python之设计模式