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

C#语言里对TCP接收数据的分包处理

C#语言里对TCP接收数据的分包处理

现在网络已经非常发达,但是底层的网络原理一直没有变化,所以TCP接收数据还会粘包,还是需要进行分包处理。
因此TCP接收数据就会有三种情况,一种是接收到数据,但是数据太少,达不到一个完整的数据包,这样就不能立即处理这个数据包,要等到下一次数据到来完整之后才能处理。
第二种情况,可能由于交换机或电脑等原因,导致收到的数据包会是多个消息包一起,这时就需要拆分的功能,把数据包一个一个地拆开来解释,才能准确得到所有数据。
最后一种情况就是刚好相等的长度,这种就比较容易处理了。

由于C#里缓冲区不能动态变长,所以每次都需要进行整合并创建新的缓冲区,这样就需要定义一个函数可以合并两个缓冲区的功能。
合并上一次接收到的数据,和新的数据拼接到一起,才可以去分析数据包,下面这个函数就是实现合并的功能:

        //组合两个缓冲区的数据,并产生一个新的缓冲区返回
        public static byte[] CombineBytes(byte[] firstBytes, int firstIndex, int firstLength,
            byte[] secondBytes, int secondIndex, int secondLength)
        {
            MemoryStream ms = new MemoryStream();
            ms.Write(firstBytes, firstIndex, firstLength);
            ms.Write(secondBytes, secondIndex, secondLength);
            byte[] bytes 

相关文章:

  • 我的Mysql突然挂了(Communications link failure)
  • 如何获取最新diffusion models多模态方向的科研进展?
  • linux篇【8】:基础IO—<后序>
  • Vue复刻华为官网 (二)
  • SQL每日一练(牛客新题库)——第15天:汇总数据
  • 【ArchSummit】Web3.0去中心化预言机网络技术剖析
  • TI单芯片毫米波雷达代码走读(二十六)—— 角度维(3D)处理之 DFT
  • Python提取pdf中的表格数据(附实战案例)
  • YOLOv5、v7改进之三十七:结合CVPR2022新作ConvNeXt网络
  • [SpringBoot] AOP-AspectJ 切面技术
  • Prometheus + Grafana 监控SpringBoot项目
  • [C]编译和预处理详解
  • C++入门(正在更新)
  • 风控大佬的一天从这两张报表开始(搬砖)了
  • 【SpringBoot】72、SpringBoot中集成Graylog分布式日志框架
  • 【Leetcode】104. 二叉树的最大深度
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Apache的80端口被占用以及访问时报错403
  • CentOS 7 防火墙操作
  • CSS3 变换
  • CSS实用技巧
  • MYSQL 的 IF 函数
  • pdf文件如何在线转换为jpg图片
  • python学习笔记 - ThreadLocal
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 番外篇1:在Windows环境下安装JDK
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 删除表内多余的重复数据
  • 思否第一天
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 推荐一个React的管理后台框架
  • 微信支付JSAPI,实测!终极方案
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ionic入门之数据绑定显示-1
  • 整理一些计算机基础知识!
  • #define与typedef区别
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (二)正点原子I.MX6ULL u-boot移植
  • (二十四)Flask之flask-session组件
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (十一)c52学习之旅-动态数码管
  • .NET 设计模式初探
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET建议使用的大小写命名原则
  • .net连接oracle数据库
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • /*在DataTable中更新、删除数据*/
  • ::
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——