[发明专利]数据传输方法、数据传输装置和服务器在审
申请号: | 201710256091.9 | 申请日: | 2017-04-19 |
公开(公告)号: | CN107135167A | 公开(公告)日: | 2017-09-05 |
发明(设计)人: | 王贵喜 | 申请(专利权)人: | 畅捷通信息技术股份有限公司 |
主分类号: | H04L12/833 | 分类号: | H04L12/833;H04L12/851;H04L29/06 |
代理公司: | 北京友联知识产权代理事务所(普通合伙)11343 | 代理人: | 尚志峰,汪海屏 |
地址: | 100094 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 数据传输 方法 装置 服务器 | ||
技术领域
本发明涉及服务器技术领域,具体而言,涉及一种数据传输方法、一种数据传输装置和一种服务器。
背景技术
在移动互联网时代的今天,越来越多的应用增加了社交属性,尤其是即时通信功能,以便于用户间可以随时随地的沟通。而随着用户量的增加,消息数据量也随之增加,实现即时通信底层的TCP(Transmission Control Protocol,传输控制协议),就面临到了严峻的考验。尤为突显的是TCP粘包和拆包的问题。如图1所示,Client为客户端,Server为服务器端,当Client向Server通过TCP传输数据时,会有以下多种情况:第一种情况,Data1和Data2分别传送至Server,数据正常传输。第二种情况,Data1和Data2粘在了一起,传送至Server,数据传输时出现粘包。第三种情况,Data2被拆分成了Data2_1和Data2_2,数据传输时出现拆包。
相关技术中,避免出现粘包和拆包的处理方式包括:消息定长,每个消息内容长度一样,不够使用特殊字符补齐。使用特殊符分割包,在每个包尾增加特殊标志,如FTP(File Transfer Protocol,文件传输协议)。间隔时间发数据包,每个数据包间隔一定的时间,以避免关联。
传统这些方式的问题显而易见,消息定长及使用特殊符分隔包不够灵活,不满足复杂场景下的应用。间隔时间发数据包,效率较低,且并不可靠,不能满足海量数据请求下需求。
因此,如何高效、可靠地避免数据在传输过程中出现粘包和拆包的情况,而且保证实现方式比较灵活,能够满足复杂场景下的应用成为亟待解决的技术问题。
发明内容
本发明正是基于上述问题,提出了一种新的技术方案,可以高效、可靠地避免数据在传输过程中出现粘包和拆包的情况,而且保证实现方式比较灵活,能够满足复杂场景下的应用。
有鉴于此,本发明的第一方面提出了一种数据传输方法,包括:在通过TCP接收数据时,将接收到的数据存放到缓冲区中;当所述缓冲区中包括包头时,获取所述包头中设置的包体长度;判断所述缓冲区中与所述包头对应的包体的长度是否等于所述包体长度;若所述包体的长度等于所述包体长度,则获取所述包体中的数据内容;若所述包体的长度小于所述包体长度,则循环执行所述判断所述缓冲区中与所述包头对应的包体的长度是否等于所述包体长度,直到所述包体的长度等于所述包体长度时为止。
在该技术方案中,数据包是由包头和包体构成,若缓存区中包体的长度小于包头中设置的包体长度,说明有一部分包体还未存放到缓存区中,例如,包头中设置的包体长度为5个字节,而在缓存区中的包体的长度为3个字节,说明还有2个字节的包体未收到,则继续判断。若判断出缓存区中包体的长度等于包头中设置的包体长度,说明包体已经全部存放到了缓存区中,则进行拆包工作以获取包体中的数据内容,从而可以高效、可靠地避免数据在传输过程中出现粘包和拆包的情况,而且保证数据传输的方式比较灵活,能够满足复杂场景下的应用,例如,海量数据传输的场景。
在上述技术方案中,优选地,所述获取所述包头中设置的包体长度之前,还包括:判断所述包头的长度是否等于预设的包头长度;若所述包头的长度等于所述包头长度,则获取所述包体长度;若所述包头的长度小于所述包头长度,则循环执行所述判断所述包头的长度是否等于所述包头中设置的包头长度,直到所述包头的长度等于所述包头长度时为止。
在该技术方案中,若缓存区中包头的长度小于包头中设置的包头长度,说明并未完全接收到包头,例如,缓存区中包头的长度为1个字节,而包头中设置的包头长度为2个字节,说明还有1个字节的包头并未接收到,则继续判断。若判断出缓存区中包头的长度等于包头中设置的包头长度,说明完全接收到包头,则获取包头中设置的包体长度。因此,通过以上方案,可以准确地获取包头中设置的包体长度。
在上述任一技术方案中,优选地,所述获取所述包体中的数据内容,具体包括:从所述缓冲区中拷贝出所述包体和所述包头;根据所述包头获取所述包体中的数据内容。
在该技术方案中,通过包头获取包体中的数据内容,从而保证了获取到的数据内容的准确性和完整性。
在上述任一技术方案中,优选地,所述从所述缓冲区中拷贝出所述包体和所述包头之后,还包括:将所述包头和所述包体从所述缓冲区中删除。
在该技术方案中,通过将包头和包体从缓冲区中删除,以将包头和包体后面的数据移动到缓冲区的起始地址,从而实现对后面的数据进行拆包处理,而且避免包头和包体占用缓冲区的空间。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于畅捷通信息技术股份有限公司,未经畅捷通信息技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710256091.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种流量管理系统及方法
- 下一篇:一种基于SDN交换机的视频净切换方法