websocket底层处理粘包_Socket解决粘包问题1

粘包是指发送端发送的包速度过快,到接收端那边多包并成一个包的现象,比如发送端连续10次发送1个字符'a',因为发送的速度很快,接收端可能一次就收到了10个字符'aaaaaaaaaa',这就是接收端的粘包。

可能我们在平时练习时没觉的粘包有什么危害,或者通过把发送端发送的速率调慢来解决粘包,但在实时通信中,发送端常常是单片机或者其他系统的信息采集机,它们的发送速率是无法控制的,如果不解决接收端的粘包问题,我们无法获得正常的信息。

就以我自己正在做的项目来说,接收端是一台单频指标测量仪,它会把当前测量的单频指标信息通过socket接口发送给服务器,发送包长度约100字节,1s能发送10个包左右,如果我不实时处理粘包,为前台就无法实时展示采集到的单频指标信息。

下面演示的通信是在之前的框架基础上增加的一些代码,首先先创建一个包模拟类生成类PackageBuilder,它可以自动生成长度不一的包,用于测试发送,代码如下,因为与通信无关所以对里面的代码不做说明。

public static classPackageBuilder

{static StringBuilder package = newStringBuilder();public static string[] BuildPackage(intcount)

{

Random random= newRandom();intdataLength;string[] packageArr = new string[count];intmyChar;for (int j = 0; j < count; j++)

{

dataLength= random.Next(25) + 25;

package.Append("HEAD|H1|"+dataLength);

package.Append("data:");for (int i = 0; i < dataLength-5; i++)

{

myChar= random.Next(26) + 65;

package.Append((char)myChar);

}

packageArr[j]=package.ToString();

package.Clear();

}returnpackageArr;

}

View Code

在main函数中测试一下生成的包

static void Main(string[] args)

{string[] str = PackageBuilder.BuildPackage(20);for (int i = 0; i < 20; i++)

{//str = PackageBuilder.BuildPackage();

Console.WriteLine(str[i]);//Thread.Sleep(500);

}

Console.Read();

}

View Code

解决粘包问题有多种方法,根据发送包的结构,我采取的是根据包数据长度分包的方法。

如上图所示,我们发送包结构为:包头+数据长度+数据,包头(HEAD|H1|)是固定长度,内容基本不变,数据长度(两个字节)是变化的,数据(data:+随机字符)也是变化的,其中数字之后的所有内容都是数据,包括'data:'。

前奏讲完了下篇文章回到socket。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python数据处理常用函数_Python大数据处理模块Pandas

Pandas使用一个二维的数据结构DataFrame来表示表格式的数据&#xff0c;相比较于Numpy&#xff0c;Pandas可以存储混合的数据结构&#xff0c;同时使用NaN来表示缺失的数据&#xff0c;而不用像Numpy一样要手工处理缺失的数据&#xff0c;并且Pandas使用轴标签来表示行和列 1、…

计算机学院校友论坛,西工大计算机学院北京校友论坛成立并举办第一次活动

2021年5月16日&#xff0c;西北工业大学计算机学院北京校友论坛成立会议暨第一次活动在北京召开&#xff0c;在京计算机学院院友齐聚一堂共同研讨计算机领域新技术、新发展&#xff0c;共叙同窗情&#xff0c;共谋新未来。西北工业大学校友总会办公室副主任刘江、计算机学院院长…

python爬虫有学c的必要吗_可以一边学python爬虫一边学c语言吗?

数据结2113构和算法并不是一门语言&#xff0c;你可以说有了Python 不用5261学C或者4102C了&#xff0c;但是不能说不需要学数据结构了&#xff0c;因为它是所有语1653言的基础。看你学Python的用途&#xff0c;如果你学Python并不深入&#xff0c;或者用来日常的办公、写个小爬…

python每个字符后添加空格_python实现指定字符串补全空格的方法

有什么方法可以指定字符串长度&#xff0c;不够的自动补空格char定义的是一个半角字符。 当人心变成市场&#xff0c;当市场变成战场&#xff0c;战场埋葬多少理想。char[]定义的是一个不定长的数组&#xff0c;实际上是指针&#xff0c;用前要初始化。不过某些编程环境可能会根…

邢台职业技术学院计算机系宿舍,邢台职业技术学院宿舍条件怎么样 男生女生宿舍图片...

大学马上就要开学了&#xff0c;邢台职业技术学院宿舍条件怎么样&#xff0c;有没有独立卫浴和空调&#xff0c;宿舍环境如何&#xff0c;想必是邢台职业技术学院大一新生最想知道的。小编整理了《邢台职业技术学院宿舍条件怎么样男生女生宿舍图片》一文&#xff0c;供大一新生…

c位边上还有什么位_c位是什么意思?C位说法的由来是什么?c位旁边二个位置叫什么?...

今天我们要讲的词是——c位。这个词想必大家一定耳熟能详&#xff0c;哪怕不知道具体的含义&#xff0c;也多多少少听过身边的人说上那么几句。特别是在追星族或者是微博上&#xff0c;总能看到“c位”“c位出道”这一类的词语。所以说&#xff0c;c位到底是什么意思呢?C位当中…

常用计算机 启动bios,详解各种电脑开机怎么进入bios设置

开机怎么进入bios呢?电脑品牌上百种&#xff0c;每种品牌又有各种类型&#xff0c;BIOS的类型成百上千&#xff0c;bios设置方法也不计其数。BIOS是整个系统中最神密最难掌握的&#xff0c;开机怎么进入bios?bios设置方法真的是一件伤脑筋的事。针对以上的问题&#xff0c;小…

python测开面试题_python十道经典面试题,测试你的python功底!

来源&#xff1a;python学习专栏 第一题&#xff0c;对象的类属性指向类对象class A(): def show(self): print( A_show ) class B(): def show(self): print( B_show ) obj B() obj.show() #这样我们能够正常调用 #那么我们能不能 #obj.show() #我们想调用A中的show 我们看一下…

国服服务器_外服玩家热议LOL国服倒计时插件:说好的公平竞技呢?

对于很多国服的英雄联盟玩家来说&#xff0c;自从多年前各种盒子辅助软件出现之后&#xff0c;玩家就越来越依赖这些辅助工作所提供的便捷&#xff0c;虽说在过去几年间官方已经对这些功能尽量进行了简化以及遏制&#xff0c;但比如打野计时器、水晶计时、眼位监视等等至今仍然…

国外计算机专业入门语言,【转自知乎】给想要报考计算机专业学生的一些建议...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼在知乎上问同类的问题较多&#xff0c;在学习上有困惑的同学好像还不少&#xff0c;我就花点时间写一下自己的看法&#xff0c;供在计算机领域起步的同学参考。欢迎业界高人补充和指正。1.本科应该比专科、职业学院要多一些人文类课…

python编辑elif显示错误_Python运行的17个时新手常见错误小结

1&#xff09;忘记在 if , elif , else , for , while , class ,def 声明末尾添加 &#xff1a;&#xff08;导致 “SyntaxError &#xff1a;invalid syntax”&#xff09; 该错误将发生在类似如下代码中&#xff1a; if spam 42 print(Hello!) 2)使用 而不是 &#xff08;导…

int转unsigned int_谢劲课题组在基于锰催化的转金属化基元反应取得系列进展

本文来自微信公众号&#xff1a;X-MOLNews用廉价的过渡金属催化剂替代贵金属催化剂是解决未来自然资源问题紧缺的一个很好选择。锰是地壳中含量排第三位的过渡金属&#xff0c;价格便宜&#xff0c;环境危害小。但由于其较低的催化活性&#xff0c;锰催化参与的许多金属有机化学…

python的作者为什么要创造python_为什么要学习Python?老男孩Python开发

在众多人的脑海中&#xff0c;Python无非就是一门编程语言而已&#xff0c;并没有什么特色&#xff0c;但是提及学习编程大部分人都会推荐Python&#xff0c;为什么?今天老男孩教育就给你说说学习Python的四大理由吧。首先先来了解一下什么是Python?Python是一个高层次的结合…

东电计算机考研大概分数,2019年各学院硕士研究生拟录取名单公示

2019年电气工程学院拟录取名单.doc 540.0 KB 2019-04-09 09:40 -a--2019年化学工程学院拟录取名单.doc 169.5 KB 2019-04-09 09:17 -a--2019年机械工程学院拟录取名单.doc 63.0 KB 2019-04-05 16:57 -a--2019年计算机工程学院拟录取名单.doc 165…

pip更换镜像源_Ubuntu20.04LTS更换软件源镜像

我用的是Linux的Windows子系统下的Ubuntu20.04LTS版本&#xff0c;这个版本很重要&#xff01;首先是备份一下开始的源打开位置/etc/apt/sources.list备份sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak然后删除掉sources.listsudo rm /etc/apt/sources.list在目录 …

rf框架的缺点_2017热门开源自动化测试框架优缺点对比

原标题&#xff1a;2017热门开源自动化测试框架优缺点对比时间一晃已来到 2017 年的最后一个季度&#xff0c;TestProject 对比了在今年比较热门的 7 款开源 自动化测试框架的优缺点&#xff0c;以帮助你选择适合自己的测试框架。1. Robot FrameworkRobot Framework(RF)是用于验…

云教版认识计算机说课,【教学设计】第1册第1课《认识电脑交朋友》

备课时间&#xff1a;2017年9月3日一、教材分析本节课是省编最新版《小学信息技术》教材第一册第一课。“学一学”由三个部分组成&#xff1a;探寻电脑应用技术&#xff1b;了解电脑组成&#xff1b;养成良好习惯。这三个部分的知识&#xff0c;不仅拓展了学生的视野&#xff0…

python中模块和包是什么_Python中模块和包的概念

将所有代码放入一个py文件&#xff1a;无法维护 如果将代码分拆放入多个py文件&#xff0c;好处&#xff1a; 同一个名字的变量互不影响 模块a 模块b | | V V #a.py #b.py x 5 x str def f1(): def f1(iterable): pass pass 引用其他模块 #test.py <---------------------…

卷组删除pv_如何安全的删除Linux LVM中的PV物理卷(硬盘或分区)

情况介绍&#xff1a;一、由于硬盘或者分区的操作方式其实都一样&#xff0c;所以我这里就以分区为例。二、/home分区2.6G&#xff0c;由如下pv组成&#xff1a;/dev/sda5 100M/dev/sda6 200M/dev/sda7 300M/dev/sda8 400M/dev/sda9 500M/dev/sda10 600M/dev/sda11 500M很碎对吧…

python输入float_python – 在tensorflow中创建一个float64变量

我正在尝试进行逻辑回归,我的训练数据集来自一个numpy float64数组.我的代码看起来像, import tensorflow as tf graph tf.Graph() with graph.as_default(): examples tf.constant(mat6) # mat6 is a numpy float64 array t_labels tf.constant(labels) # labels is an a nu…