网站的访问速度和什么有关系,wordpress360,网站的布局结构三种,wordpress登陆页面404粘包是指发送端发送的包速度过快#xff0c;到接收端那边多包并成一个包的现象#xff0c;比如发送端连续10次发送1个字符a#xff0c;因为发送的速度很快#xff0c;接收端可能一次就收到了10个字符aaaaaaaaaa#xff0c;这就是接收端的粘包。可能我们在平时练习时没觉的…粘包是指发送端发送的包速度过快到接收端那边多包并成一个包的现象比如发送端连续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。