C#语言里对TCP接收数据的分包处理
Posted caimouse
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于C#语言里对TCP接收数据的分包处理的主要内容,如果未能解决你的问题,请参考以下文章