[发明专利]基于Windows的TCP/IP协议的网络传输方法有效
申请号: | 201410120252.8 | 申请日: | 2014-03-27 |
公开(公告)号: | CN103873474B | 公开(公告)日: | 2017-05-17 |
发明(设计)人: | 许广柱;李双军;唐云龙;章萌 | 申请(专利权)人: | 西安航天动力试验技术研究所 |
主分类号: | H04L29/06 | 分类号: | H04L29/06 |
代理公司: | 西安智邦专利商标代理有限公司61211 | 代理人: | 王少文 |
地址: | 710100 陕*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 windows tcp ip 协议 网络 传输 方法 | ||
技术领域
本发明属于软件开发设计领域,具体涉及一种基于Windows的TCP/IP协议的网络传输方法。
背景技术
TCP/IP协议是当前广域网和局域网通用的网络协议,在基于windows操作系统的网络数据传输软件设计和编码过程中,设计者可以采用多种传输方法(如常规的多线程socket阻塞式设计、异步选择I/O复用机制WSAAsynSelect、完成端口网络方法I/O Completion Port等)、使用各种现有的框架(如MFC、.NET FCL等)或者控件,但不论如何选择,传统的阻塞式/异步选择机制是无法与高性能的完成端口机制相比。而且在众多的基于完成端口设计出的网络数据传输方法中,如何高效地解决各种数据处理问题需要进一步完善传输方法。
TCP/IP协议上的传统阻塞式输方法一般采用简单的多线程C/S握手机制,工作过程属于阻塞式传输;阻塞式传输方法,从使用可用的socket开始到最后数据获取完成才会返回,中间的过程完全阻塞。对于一次数据获取过程来说,只能处理一个套接字。图1是该传输方法的原理图。
异步选择I/O复用机制方法采用的是多线程非阻塞注册集合式连接管理方式,属于异步并发消息(事件)式方法,其消息(事件)的触发是有很多条件限制的,而且注册集合中有数量限制,即无法进行大并发数据连接和接收管理。异步select方法,分两个过程,进行两次系统调用,select过程先阻塞,直到有活动的套接字才返回。可以处理多个套接字,但数量有限。图2是该传输方法的原理图。图6-a为该传输方法的数据处理方式示意图。
发明内容
本发明提出了一种基于Windows的TCP/IP协议的网络传输方法,解决了现有网络传输方法中无法高效地解决各种数据处理问题。
本发明的具体技术方案:
一种基于Windows的TCP/IP协议的网络传输方法,其特征在于:包括以下步骤:
1)应用层调用内核层的操作系统功能;
具体是:应用层调用操作系统的IOCP系统函数与内核层进行交互;
2)应用层和内核层对接:
2.1)应用层向内核层提供功能接口,开辟线程池、缓冲池,并向内核层提出网络传输需求;
2.2)应用层向内核层投递多个AcceptEx异步连接请求;
2.3)应用层向内核层投递多个数据接收请求;
3)内核层检测网络端口的信号;
4)数据传输:
A)若信号为“连接请求”,则内核层从缓冲池中取出一个AcceptEx异步连接进行连接请求处理,并保持此连接;内核层利用上述连接进行数据发送或者接收;若连接中止,则内核层将取出的连接位置返回连接缓冲池中,等待下一个指令;
B)若信号为“发送请求”,则应用层将数据打包后通过步骤2.1提供的接口,传输给内核层,内核层通过硬件端口发送数据;
C)若信号为“接收请求”,则内核层通过步骤2.1提供的接口,传输数据给应用层,应用层进行数据处理;具体步骤如下:
应用层提供的数据接收处理模块在独立的线程中,内核层数据传输到达之后,应用层从线程池中取出一个线程并唤醒此线程,利用此线程进行处理并将数据放入缓冲池中,从而进行下一步的数据处理;在数据缓冲的同时,应用层向内核层投递新的数据接收请求,则内核层立即返回并等待接收另一个数据包。
根据上述方法所述:当进行步骤4的C中出现“数据粘包”时:具体解决步骤如下:
1)应用层根据数据包头中数据包的大小,并利用数据缓冲池中已有的数据块序列号对粘包情况进行判读;
2)应用层从线程池中取出一个线程,在此线程中根据数据包的数据结构对数据块剥离;
3)若零散数据块已经能构成完整数据包,则打包这些数据块形成完整数据包;若数据仍然不完整,则将此数据块放入缓冲池中并编号等待下次数据包。
本发明的优点在于:
1、本发明采用AcceptEx异步连接机制,相比Accept阻塞连接,AcceptEx属于异步连接,而且可以完成:接受连接、返回连接的本地和远程地址、获取第一个数据块三个任务,从而使得连接处理可以使用较少的线程处理大量的客户连接。
2、本发明在处理接收的数据包时,一方面采用增加数据头部便于接收时确认数据包大小,另一方面在接收数据时采用数据缓冲,从而进行多次数据拼接操作,直到完整数据包接收完毕。因此,该方法可解决粘包数据分离并完整接收;解决常见的TCP数据包粘包问题。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安航天动力试验技术研究所,未经西安航天动力试验技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410120252.8/2.html,转载请声明来源钻瓜专利网。