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接收数据的分包处理的主要内容,如果未能解决你的问题,请参考以下文章

粘包 拆包(分包) 半包

TCP网络通讯如何解决分包粘包问题(有模拟代码)

简易游戏服务器—分包与粘包问题

TCP的组包半包粘包与分包

网络 -- TCP概述三次握手四次挥手粘包分包数据分段

网络 -- TCP概述三次握手四次挥手粘包分包数据分段