System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种数据处理方法和服务器技术_技高网

一种数据处理方法和服务器技术

技术编号:40789503 阅读:3 留言:0更新日期:2024-03-28 19:19
本发明专利技术实施例涉及通信领域,尤其涉及一种数据处理方法和服务器。服务器获取客户端发送的新数据,将所述新数据存储于指令存储区,所述新数据具有第一结构,所述第一结构包括边界标志位和消息体,所述消息体位于所述边界标志位之后;若残留存储区存在残留数据,则将所述指令存储区内的存储数据与所述残留数据结合得到拼合数据,其中,所述残留存储区用于存储没有所述边界标志位的数据;基于所述边界标志位从所述拼合数据中拆解出所述消息体,获得消息指令,可以有效地对粘包/拆包数据进行处理,通过残留存储区保留残留数据与存储数据结合,避免因拆包错漏消息指令,通过边界标志位区分消息指令的边界,解决了难以从粘连的数据包中提取完整消息指令的问题。

【技术实现步骤摘要】

本专利技术实施例涉及通信领域,尤其涉及一种数据处理方法和服务器


技术介绍

1、在计算机网络通信中,tcp(transmission control protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。tcp为用户提供可靠的端到端连接,能保证tcp消息有序无误地传输,但是由于tcp规定字节流式传输,它不含消息、数据包等概念,因此在传输过程中容易出现粘包/拆包问题。

2、目前,对于发送方引起的粘包现象,用户可通过编程设置来避免,但它关闭了优化算法,降低了网络发送效率,影响应用程序的性能。而对于接收方引起的粘包,可通过优化程序设计、精简接收进程工作量、提高接收进程优先级等措施,使其及时接收数据,从而尽量避免出现粘包现象,但这些方法只能减少出现粘包的可能性,但并不能完全避免粘包,当发送频率较高时,或由于网络突发可能使某个时间段数据包到达接收方较快,接收方还是有可能来不及接收,从而导致粘包。


技术实现思路

1、本专利技术实施例主要解决的技术问题是提供一种数据处理方法,能够处理粘包/拆包数据,解决数据完整性以及准确性的问题。

2、为解决上述技术问题,第一方面,本专利技术实施例中提供了一种数据处理方法,用于服务器,包括:

3、获取客户端发送的新数据,将所述新数据存储于指令存储区,所述新数据具有第一结构,所述第一结构包括边界标志位和消息体,所述消息体位于所述边界标志位之后;

4、若残留存储区存在残留数据,则将所述指令存储区内的存储数据与所述残留数据结合得到拼合数据,其中,所述残留存储区用于存储没有所述边界标志位的数据;

5、基于所述边界标志位从所述拼合数据中拆解出所述消息体,获得消息指令。

6、在一些实施例中,所述基于所述边界标志位从所述拼合数据中拆解出所述消息体,获得消息指令,包括:

7、遍历所述拼合数据,查找所述边界标志位;

8、若查找到的首个边界标志位的第一字节位于所述残留存储区内,则丢弃所述边界标志位之前的数据,将所述边界标志位以及所述边界标志位以后的数据存储于所述指令存储区;

9、否则,舍弃所述残留数据;

10、基于所述边界标志位解析所述指令存储区内的存储数据,获得消息体,以获得消息指令。

11、在一些实施例中,所述方法还包括:

12、释放所述残留存储区,设置为空区域。

13、在一些实施例中,所述方法还包括:

14、若所述残留存储区不存在残留数据,则基于所述边界标志位解析所述指令存储区内的存储数据,获得消息体,以获得消息指令。

15、在一些实施例中,所述基于所述边界标志位解析所述指令存储区内的存储数据,获得消息体,以获得消息指令,包括:

16、遍历所述存储数据,查找所述边界标志位;

17、若查找到所述边界标志位,则基于所述边界标志位解析所述存储数据,获得消息体,以获得消息指令;

18、否则,将所述存储数据存入所述残留存储区作为残留数据,重置所述指令存储区。

19、在一些实施例中,所述第一结构包括消息头结构,所述消息头结构包括所述边界标志位和预设消息长度,所述预设消息长度位于所述边界标志位之后,所述若查找到所述边界标志位,则基于所述边界标志位解析所述指令存储区内的存储数据,获得消息体,以获得消息指令,包括:

20、基于所述边界标志位拆解所述消息头结构,从所述消息头结构中提取所述预设消息长度;

21、若消息数据的长度小于所述预设消息长度,则不提取所述存储数据中的消息体,将所述存储数据保留在所述指令存储区,其中,所述消息数据为所述存储数据中位于所述消息头结构后的数据;

22、若所述消息数据的长度等于所述预设消息长度,则将所述消息数据作为所述消息体,删除所述指令存储区内的数据;

23、若所述消息数据的长度大于所述预设消息长度,则从所述消息数据中拆解所述预设消息长度的数据,作为所述消息体,删除所述消息体以及位于所述消息体之前的数据。

24、在一些实施例中,所述获取客户端发送的新数据,将所述新数据存储于指令存储区,包括:

25、获取客户端发送的新数据,将所述新数据保存在接收缓存中;

26、若所述指令存储区中空闲区域的长度小于所述新数据的长度,则重新分配所述指令存储区大小,以使所述空闲区域的长度大于或者等于所述新数据的长度;

27、将所述新数据存储于指令存储区的现有数据之后。

28、在一些实施例中,所述第一结构还包括数据校验位,所述方法还包括:

29、在拆解出消息指令后,利用数据校验位对所述消息指令的完整性进行二次验证。

30、在一些实施例中,所述方法还包括:

31、为每一个客户端设置不同的残留存储区和指令存储区,所述残留存储区和指令存储区由不同的套接字进行区分;

32、若接收到多个所述客户端发送的所述新数据,则根据所述套接字,将所述新数据存储于所述套接字对应的所述指令存储区。

33、为解决上述技术问题,第二方面,本专利技术实施例提供了一种服务器,包括:

34、至少一个处理器,以及

35、存储器,所述存储器与所述至少一个处理器通信连接,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上第一方面所述的方法。

36、本专利技术实施例的有益效果:区别于现有技术的情况,本专利技术实施例提供的数据处理方法,通过获取客户端发送的具有边界标志位的新数据,将新数据存储在指令存储区中,如果用于存储没有边界标志位数据的残留存储区里存在残留数据,则将指令存储区里的存储数据和残留数据结合得到拼合数据,基于边界标志位,从拼合数据中拆解出消息体,得到消息指令,可以有效地对粘包/拆包数据进行处理,通过残留存储区保留残留数据与存储数据结合,避免因拆包错漏消息指令,通过边界标志位区分消息指令的边界,解决了难以从粘连的数据包中提取完整消息指令的问题。

本文档来自技高网...

【技术保护点】

1.一种数据处理方法,用于服务器,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述基于所述边界标志位从所述拼合数据中拆解出所述消息体,获得消息指令,包括:

3.根据权利要求2所述的方法,其特征在于,所述方法还包括:

4.根据权利要求1所述的方法,其特征在于,所述方法还包括:

5.根据权利要求2-4任一项所述的方法,其特征在于,所述基于所述边界标志位解析所述指令存储区内的存储数据,获得消息体,以获得消息指令,包括:

6.根据权利要求5所述的方法,其特征在于,所述第一结构包括消息头结构,所述消息头结构包括所述边界标志位和预设消息长度,所述预设消息长度位于所述边界标志位之后,所述若查找到所述边界标志位,则基于所述边界标志位解析所述指令存储区内的存储数据,获得消息体,以获得消息指令,包括:

7.根据权利要求1所述的方法,其特征在于,所述获取客户端发送的新数据,将所述新数据存储于指令存储区,包括:

8.根据权利要求1所述的方法,其特征在于,所述第一结构还包括数据校验位,所述方法还包括:p>

9.根据权利要求1所述的方法,其特征在于,所述方法还包括:

10.一种服务器,其特征在于,包括:

...

【技术特征摘要】

1.一种数据处理方法,用于服务器,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述基于所述边界标志位从所述拼合数据中拆解出所述消息体,获得消息指令,包括:

3.根据权利要求2所述的方法,其特征在于,所述方法还包括:

4.根据权利要求1所述的方法,其特征在于,所述方法还包括:

5.根据权利要求2-4任一项所述的方法,其特征在于,所述基于所述边界标志位解析所述指令存储区内的存储数据,获得消息体,以获得消息指令,包括:

6.根据权利要求5所述的方法,其特征在于,所述第一结构包括消...

【专利技术属性】
技术研发人员:洪梓杰李继洲江华
申请(专利权)人:深圳汉弘软件技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1