本发明属于数据交换,尤其涉及一种基于网闸的文件交换的方法及系统。
背景技术:
网闸技术的需求来自内网与外网数据互通的要求,比如政府的电子政务是对公众服务,与互联网连通,而内网的政府办公网络,由于保密的要求,内网若与外网连通,则面临来自公网的各种威胁。安全专家给出的建议是:由于目前的安全技术,无论防火墙、UTM等防护系统都不能保证攻击的一定阻断,入侵检测等监控系统也不能保证入侵行为完全捕获,所以最安全的方式就是物理的分开,所以在公安部的技术要求中,要求电子政务的内、外网络之间“物理隔离”。没有连接,来自外网对内网的攻击就无从谈起。
但是,网络的物理隔离,给数据的通讯带来很多不便,比如工作人员出差只能接入互联网,要取得内网的文件就没有办法,只能让办公室的人把文件放在外网上。另外,内网办公系统需要从外网提供的统计数据,由于服务隔离,数据的获取也很困难。因此,随着网络业务的日益成熟,数据交换的需求提议强烈。
综上所述,现有技术存在的问题是:
网闸和应用系统之间不能通过TCP进行交流,只能将数据落地成文件,应用系统直接和网闸打交道会很不方便。
而如果内网办公系统需要向外网提供统计数据等服务,由于协议的不支持,服务被隔离,数据的获取很困难。而且,现有技术中,没有通过与发送节点和接收节点连接,实现TCP协议跨网闸的数据传输。
本发明通过发送节点和接收节点处理与网闸之间的数据交换的工作,并对外开放使用TCP进行数据传输,使的应用系统可以方便的处理自己的业务逻辑而不用考虑网闸的数据交换的问题。同时在TCP基础上可以实现支持HTTP等协议,更加方便面向服务的应用系统。
技术实现要素:
针对现有技术存在的问题,本发明提供了一种基于网闸的文件交换的方法及系统,
本发明是这样实现的,一种基于网闸的文件交换方法包括:
步骤一:使用TCP协议连接发送节点监听的IP和端口,将数据发送给发送节点;
步骤二:将收到的数据分割成固定长度的块,并编号,然后打包为特定格式的数据文件,并生成额外的控制信息保存到元信息文件中,将打包好的数据文件和元信息文件发送给网闸;
步骤三:网闸通过摆渡的形式将发送节点发来的文件发送到接收节点的指定文件夹;
步骤四:接收节点不断扫描指定目录,发现目录中有新文件,则开始处理新文件;元信息文件不存在,则不做任何处理,等待下一次扫描;
步骤五:接收节点将数据还原后,通过读取配置文件获得目标应用系统的配置信息,然后连接目标应用系统,连接成功后,通过建立好的TCP连接将数据发送至应用系统。
进一步,步骤四具体包括:
接收节点不断扫描指定目录,发现目录中有新文件,则开始处理新文件;如果元信息文件不存在,则不做任何处理,等待下一次扫描;如果元信息文件存在,则读取元信息文件获取数据文件的信息。然后判断是否存在数据文件,如果数据文件不存在,则不做处理,等待下次扫描;如果数据文件存在,但是和元信息文件的信息不匹配,说明数据文件还没传输完毕,则不做处理,等待下次扫描;如果数据文件和元信息匹配,则将数据文件解包还原。还原过程中会验证文件传输的完整性和时序性。
进一步,步骤五中,如果连接失败,则重试,重试3次均失败后,将数据文件和元信息文件进行备份,用于目标系统恢复后再使用,并记录错误日志。
本发明的另一目的在于提供一种实现基于网闸的文件交换方法的计算机程序。
本发明的另一目的在于提供一种实现所述基于网闸的文件交换方法的信息数据处理终端。
本发明的另一目的在于提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行所述的基于网闸的文件交换方法。
本发明的另一目的在于提供一种实现所述基于网闸的文件交换方法的基于网闸的文件交换的系统,所述基于网闸的文件交换系统包括:
应用系统、发送节点、网闸、接收节点;
应用系统:利用TCP与发送节点、接收节点连接;用于将数据发送给发送节点,从接收节点接收数据,在网闸之间“透明”地实现数据交换;
发送节点:与应用系统、网闸连接;用于接收系统发送的数据,并将数据打包为特定的格式文件,并生成额外的控制信息保存到文件中,将文件交给网闸;
网闸:与发送节点、接收节点连接;用于接收发送节点传送的文件,并通过摆渡的形式将文件发送到接收节点的指定文件夹;
接收节点:与网闸、应用系统连接;用于扫描网闸发送到指定目录的文件,读取控制信息,获取特定格式文件的元信息,保证文件传输的完整性和时序性,并将特定格式的文件内容还原为数据,最后将数据发送给应用系统。
进一步,所述网闸包括:
网闸为内外网之间的隔离设备,网闸内嵌系统在物理隔离的情况下进行数据交换。
综上所述,本发明的优点及积极效果为:
本发明通过与发送节点和接收节点连接,实现TCP协议跨网闸的数据传输;基于TCP协议的数据交换,使内外网两侧文件交换感觉不到网闸的存在,“透明”地实现数据交换,保证文件传输过程中的完整性和时序性;应用系统不用考虑网闸的存在,只需要跟发送节点和接收节点打交道就能通过TCP协议传输数据,为应用系统对外服务提供一种可能。
而如果应用系统直接和网闸打交道,则应用系统需要做很大的改动将数据落地为文件,然后通过网闸交换文件,无疑增加了应用系统开发和使用的难度。通过本发明可以有效地解耦,让应用系统不用考虑网闸的存在,只需要专注原有业务就行。
附图说明
图1是本发明实施例提供的基于网闸的文件交换系统结构示意图。
图2是本发明实施例提供的文件交换系统工作流程图。
图中:1、应用系统;2、发送节点;3、网闸;4、接收节点。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
内网办公系统需要从外网提供的统计数据,由于服务隔离,数据的获取很困难。
而且,现有技术中,没有通过与发送节点和接收节点连接,实现TCP协议跨网闸的数据传输。
为解决上述技术问题,下面结合具体方案对本发明的应用原理作详细描述。
如图1所示,本发明实施例提供的基于网闸的文件交换系统包括:
应用系统1、发送节点2、网闸3、接收节点4。
应用系统1:利用TCP与发送节点2、接收节点4连接;用于将数据发送给发送节点2,从接收节点4接收数据,在网闸3之间“透明”地实现数据交换。
发送节点2:与应用系统1、网闸3连接;用于接收应用系统1发送的数据,并将数据打包为特定的格式文件,并生成额外的控制信息保存到文件中,将文件传送给网闸3。
网闸3:与发送节点2、接收节点4连接;用于接收发送节点2传送的文件,并通过摆渡的形式将文件发送到接收节点4的指定文件夹。
接收节点4:与网闸3、应用系统1连接;用于扫描网闸3发送到指定目录的文件,读取控制信息,获取特定格式文件的元信息,保证文件传输的完整性和时序性,并将特定格式的文件内容还原为数据,并将数据发送给应用系统1。
本发明实施例提供的网闸3包括:
网闸3为内外网之间的隔离设备,网闸3内嵌系统可在物理隔离的情况下实现数据交换。
如图2所示,本发明实施例提供的基于网闸的文件交换方法包括:在网闸两侧各部署一个交换节点,通过定时扫描指定的目录,发送和接收网闸两侧的文件,实现了内外网之间文件交换。
具体包括:
S101:应用系统通过TCP将数据发送给发送节点。
S102:发送节点将数据打包为特定的格式文件,并生成额外的控制信息保存到文件中,将文件发送给网闸。
S103:网闸将发送节点发送的文件通过摆渡的形式将文件发送到接收节点的指定文件夹。
S104:接收节点扫描网闸发送至指定目录的文件,读取控制信息,获取特定格式文件的元信息,保证文件传输的完整性和时序性,并将特定格式的文件内容还原为数据。
S105:接收节点将还原后的数据传送至应用系统。
步骤S104具体包括:
接收节点不断扫描指定目录,发现目录中有新文件,则开始处理新文件;如果元信息文件不存在,则不做任何处理,等待下一次扫描;如果元信息文件存在,则读取元信息文件获取数据文件的信息。然后判断是否存在数据文件,如果数据文件不存在,则不做处理,等待下次扫描;如果数据文件存在,但是和元信息文件的信息不匹配,说明数据文件还没传输完毕,则不做处理,等待下次扫描;如果数据文件和元信息匹配,则将数据文件解包还原。还原过程中会验证文件传输的完整性和时序性。
步骤S105中接收节点将数据还原后,通过读取配置文件获得目标应用系统的配置信息,然后连接目标应用系统,连接成功后,通过建立好的TCP连接将数据发送至应用系统。
如果连接失败,则重试,重试3次均失败后,将数据文件和元信息文件进行备份,用于目标系统恢复后再使用,并记录错误日志。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
来源:中关村在线 更新时间:2012-04-15
作为保证不同安全级别网络间的高安全隔离与实时数据交换的安全设备,安全隔离网闸已经在公安、税务等政府行业得到广泛应用,另外,在电力、煤炭、钢铁等能源行业和一些制造型企业也开始大量应用。鉴于广大用户对网闸安全隔离功能的信赖,之前不敢连的网络也通过安全隔离网闸连接起来了,同时,用户还寄希望于安全隔离网闸能对数据内容进行高安全的检查控制。
在保证安全的前提下,安全隔离网闸厂商也在尽力地满足着用户对安全隔离网闸支持更多网络应用的需求,且已经取得了显著的成效。当前,安全隔离网闸已由最初只支持文件交换功能(工作原理是模拟人工拷盘),发展到具有数据库同步、数据库访问、邮件访问、安全Web访问、FTP访问等多种功能,能对HTTP、FTP、SMTP、POP3等通用协议进行内容检查,但是目前绝大部分用户的应用采用的都是自定义格式的私有协议,如果没有对安全隔离网闸实施二次开发,就无法对交换的数据内容进行过滤。这是因为私有协议的数据格式、数据内容等都没有公开,导致安全隔离网闸厂商无法定义出相应的数据内容检查规则,也就无法实现高安全的隔离交换控制。
为了应对通用安全隔离网闸无法对私有协议进行数据内容检查的问题,安全隔离网闸厂商、用户以及相关的主管部门都在积极寻找相应对策,目前,主要有以下两种技术路线。
其一,重点实现电路级数据单向传输,并强化用户认证功能。如通过国家电力调度通信中心的检测认证,在电力行业广泛应用的“单向横向安全隔离装置”,以及国家保密局正在认证,可以部署在电子政务中的“安全隔离与信息单向导入系统”等,但部署这些单向安全隔离网闸时,也需要将应用系统进行改造,另外,这些单向安全隔离网闸应用扩展能力差,只适合在特定行业内强制推行,无法应用于双向数据交换、应用复杂的网络环境。
技术路线之二则是与用户的具体应用相结合,在双向数据交换的网络环境下实现对交换数据内容的检查,在这方面,广大安全隔离网闸厂商也在不断进行研发投入。
当前,由于绝大部分用户的应用都需要进行双向数据传输,因此第二种技术路线将是安全隔离网闸发展的必由之路,按照第一种技术路线发展的单向安全隔离网闸,则会发展成为一类独立的安全产品。
下面,我们就以联想网御在第二种技术路线方面的研发探索为例,通过联想网御对私有协议的数据内容检查解决方案,具体说明安全隔离网闸与用户的具体应用相结合是如何方便灵活地实现的。
科学的体系架构
a) 科学的系统架构
联想网御安全隔离网闸的系统硬件平台由内网主机系统、外网主机系统、隔离交换矩阵三部分组成:内网/外网主机系统分别具有独立的运算单元和存储单元,并以联想网御自主知识产权的VSP (Versatile Security Platform,通用安全平台)作为操作系统;隔离交换矩阵基于LeadASIC专用芯片技术及相应的时分多路隔离交换逻辑电路,不受主机系统控制,能独立完成应用数据的封包、摆渡、拆包,从而实现内外网之间的数据隔离交换。主机系统对交换数据的检查流程如下图所示。安全隔离网闸在完成常规的IP地址、协议类型、协议分析等检查后,还能在数据通过隔离交换矩阵封包之前进行数据内容的检查。
联想网御安全隔离网闸数据检查流程图
b) 检查框架
VSP操作系统中集成的USE(Uniform Security Engine,统一安全引擎)完成了协议终结、应用内容的还原和检查。联想网御安全隔离网闸以自定义的、开放的ACI(Application Checking Interface,应用检查接口)为基础,不但支持内置的、面向通用应用协议(如HTTP、FTP等)的多种检查模块,还支持内容检查模块的扩展。用户可以根据需要来自行开发内容检查模块,并通过安全隔离网闸的WEB管理界面上传至VSP操作系统,通过使用内容检查模块,用户可实现对基于私有协议的应用内容的数据格式、完整性、关键字、内容安全的检查。
联想网御安全隔离网闸内容检查框架图
清晰的分工合作
在研发上,考虑到只有用户对私有协议的数据格式、数据内容等信息最清楚,联想网御因此提出“分工负责,合作开发”的研发思路。
“分工负责”指的是用户(或用户指定的软件开发商)负责内容检查模块的开发,联想网御则负责在安全隔离网闸上提供ACI应用检查接口和丰富的开发支撑文档。
“合作开发”指的是联想网御将积极配合用户进行相应的检查模块调试,使用户开发的检查模块能在安全隔离网闸上发挥效用。
方便的调用方式
对于加载的多个内容检查模块,联想网御安全隔离网闸可以有选择性地在安全规则中调用,并且可以对具体内容检查模块进行检查内容的启用或禁止,如图三和图四所示。
联想网御安全隔离网闸管理界面的安全规则截图
联想网御安全隔离网闸管理界面的检查内容定义截图
丰富的文档支撑
为了方便用户进行内容检查模块的开发,联想网御提供了ACI软件开发包。此开发包中的内容包括:模块与安全隔离网闸之间的非标准统一接口开发说明文档,包括应用编程接口的库、头、帮助、例子等;生成检查模块的说明文档,包括模块开发工具的库、头、帮助、例子;强认证、加密开发说明文档,基于此文档开发可实现主机与安全隔离网闸间的用户身份验证、用户访问权限控制和数据传输加密功能。
在安全隔离网闸产品与用户具体应用相结合方面,以成熟的理论体系为前提,联想网御已经与某气象局、某广播电台、某煤矿等多个行业客户共同进行了成功的实践。
物理隔离网闸是使用带有多种控制功能的固态开关读写介质连接两个独立主机系统的信息安全设备。由于物理隔离网闸所连接的两个独立主机系统之间,不存在通信的物理连接、逻辑连接、信息传输命令、信息传输协议,不存在依据协议的信息包转发,只有数据文件的无协议“摆渡”,且对固态存储介质只有“读”和“写”两个命令。所以,物理隔离网闸从物理上隔离、阻断了具有潜在攻击可能的一切连接,使“黑客”无法入侵、无法攻击、无法破坏,实现了真正的安全。
网闸是在两个不同安全域之间,通过协议转换的手段,以信息摆渡的方式实现数据交换,且只有被系统明确要求传输的信息才可以通过。其信息流一般为通用应用服务。
注:网闸的“闸”字取自于船闸的意思,在信息摆渡的过程中内外网(上下游)从未发生物理连接,所以网闸产品必须要有至少两套主机和一个物理隔离部件才可完成物理隔离任务。
隔离网闸的一个基本特征,就是内网与外网永远不连接,内网和外网在同一时间最多只有一个同隔离设备建立数据连接(可以是两个都不连接,但不能两个都连接)。
目前网络威胁中相当大的一部分来自与浏览器威胁,网闸对这种威胁有用吗?以前不久的图片文件漏洞来说,网闸是不会对这种应用层数据进行过滤的,那么,威胁依然存在。而对于提供对外服务的网络,对其中应用进行攻击的例子大多是构造一些正常(看起来)的数据包,这些漏洞,都是针对应用层的,网闸束手无策。所以,“真正的安全”是不可能的,没有绝对的安全!
网闸的结构一般都采用2+1:内机+外机+不可编程硬件。早期网闸的交换模块以电子开关的形式实现物理上的隔离,而电子开关由于切换速率问题,无法满足实时数据交换需求,已经被逻辑开关取而代之。 从严格意义上说,逻辑开关只是实现逻辑上的隔离,而不是物理上的。
私有协议就是交换模块传输数据的硬件读写协议,不同厂家的接口不同,如SCSI,1394等
1.工作模式
网闸的数据交换都是基于代理实现的。。
网闸按工作方式可以分为主动模式和被动模式。在主动模式下,网闸作为客户端,往网络中的服务器上读写数据;在被动模式下,网闸充当服务器的角色,在本地打开监听端口,,接收外界的数据。从安全上来说,主动模式远大于被动模式,但应用和性能较差。
2.数据交换流程
以下是被动工作模式大概的一个数据交换过程:
外网接收数据包-〉检查包头信息-〉拆除包头信息-〉提取并检查应用层数据-〉按私有协议封装数据-〉传输到内网-〉封装成网络协议包-〉传输到内网接收端
保证数据传输手段主要有以下两种:
协议阻断:网闸在传输接收到的数据包时,需拆除协议包头信息,然后将应用层数据按私有协议重新封装分片,这样能保证所有网络攻击只能到达外网。
专有协议检测模块:网闸的数据传输都是基于应用层代理,对于支持的应用层协议,都有相应的传输模块。每个模块只处理对应的应用层数据请求,且根据协议的特性对数据本身进行内容检测、过滤等操作,保证数据的安全性。
从网闸的系统架构以及工作模式可看出,它的性能是比不上防火墙的,包括吞吐,延时,尤其是并发数。如果有哪个厂家宣称自己的产品能达到线速,那简直就是告诉别人他家做的不是网闸。
技术领域:
本发明涉及计算机网络
技术领域:
,具体涉及通过http实现跨越网闸进行Socket保持连接通信的方法及系统。
背景技术:
:在日常工作中有时会遇到需要将原本在网闸内的通过Socket连接的通信业务,需要改进为可以与互联网上其他用户进行交互的需求。通常情况下Socket连接就是TCP连接,Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致Socket连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。而http连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是http连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端。因此在Socket通信中实现http进行转发具有十分大的困难。目前,通过http进行Socket通信的方法并不多,随着业务的需要,更多的系统切实的需要这种技术来完成特定的业务需要。技术实现要素:鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的通过http实现跨越网闸进行Socket保持连接通信的方法及系统,目的在于提供一种能够既实现通过http转发请求实现跨越网闸、防火墙进行Socket通信的机制,又能保持整个通讯过程中Socket始终连接不断。依据本发明的一个方面,提供了通过http实现跨越网闸进行Socket保持连接通信的方法,包括以下步骤:步骤(1)、第一服务器的第一端口接收客户端发起的请求,将请求数据包以Socket通信的方式发送给第一服务器的第二端口;步骤(2)、所述第二端口接收到所述请求数据包后,建立一SocketChannel使得所述第二端口与第一服务器的第三端口之间建立不断开的连接通道;步骤(3)、所述第三端口通过所述连接通道接收到所述请求数据包后,建立与第二服务器进行通信的http请求,将所述第二端口发送过来的所述请求数据包通过所述http请求发送给所述第二服务器的第四端口;步骤(4)、所述第二服务器上已经建立存储映射表,所述第四端口接收到所述请求数据包后,判断所述客户端IP地址是否存在于所述存储映射表中;步骤(5)、如果不存在,则建立一个新的与业务服务器的Socket连接,发送接收到的所述请求数据包,并将该Socket连接信息以IP地址为主键存储在所述存储映射表中;步骤(6)、如果存在,则通过所述IP地址从所述存储映射表中取得已经存在的Socket连接,通过该Socket连接发送接收到的所述请求数据包;步骤(7)、所述业务服务器通过原路径的通信方式将处理结果数据包返回到所述客户端。进一步地,所述步骤(1)和步骤(2)之间还包括:所述第二端口对客户端请求进行监听,一旦监听到客户端请求连接后,启动线程进行Socket通信。进一步地,所述步骤(2)中具体包括:所述第二端口接收到所述请求数据包后,发起一个与第一服务器的第三端口进行通信的新的Socket连接;使用NIO流建立一个SocketChannel模拟Socket通信,所述第二端口与第一服务器的第三端口之间建立不断开的连接通道;将所述第二端口通过Socket通信发送的所述请求数据包和与所述第三端口进行通信的所述Socket连接进行绑定。进一步地,所述步骤(4)中的所述存储映射表,通过客户端IP地址作为主键,存储不同的Socket连接信息。更进一步地,所述步骤(7)中具体包括:所述业务服务器通过与所述第四端口之间建立的Socket连接进行通信,将处理结果数据包返回到所述第四端口;所述第四端口接收到所述处理结果数据包后,通过http协议回应所述第三端口的http请求,发送所述处理结果数据包;所述第三端口接收到所述处理结果数据包后,通过所述SocketChannel建立的所述连接通道,将所述处理结果数据包以Socket通信的方式发送给所述第二端口;所述第二端口将所述处理结果数据包通过与所述第一端口之间建立的Socket连接返回到客户端。依据本发明的另一个方面,提供了通过http实现跨越网闸进行Socket保持连接通信的系统,包括:客户端、第一服务器、第二服务器和业务服务器,其中:所述第一服务器在网闸外,所述客户端将请求数据包通过Socket方式发送给所述第一服务器,所述第一服务器将来自所述第二服务器的处理结果数据包通过Socket方式发送给所述客户端;所述第二服务器在网闸内,已经建立存储映射表,所述第一服务器与所述第二服务器之间采用http协议的方式进行通信,所述第一服务器将来自所述客户端的所述请求数据包通过第一端口、第二端口和第三端口以http协议的方式发送给所述第二服务器的第四端口,所述第二端口建立一个SocketChannel模拟Socket通信,所述第二端口与所述第三端口之间建立不断开的连接通道,所述第二服务器将来自业务服务器的所述处理结果数据包以http协议的方式发送给所述第一服务器;所述第二服务器与所述业务服务器之间采用Socket连接,所述第二服务器将接收的所述请求数据包发送给所述业务服务器,所述业务服务器对所述请求数据包进行处理,并将处理结果数据包通过Socket方式发送给所述第二服务器。进一步的,还包括一判断模块,所述第四端口通过所述http请求接收到所述请求数据包后,调用所述判断模块判断所述客户端IP地址是否存在于所述存储映射表中;如果不存在,则建立一个新的与业务服务器的Socket连接,发送接收到的所述请求数据包,并将该Socket连接信息以IP地址为主键存储在所述存储映射表中;如果存在,则通过所述IP地址从所述存储映射表中取得已经存在的Socket连接,通过该Socket连接发送接收到的所述请求数据包。进一步的,所述存储映射表通过IP地址作为主键,存储不同的Socket连接信息。进一步的,还包括一SocketChannel建立模块,适用于所述第二端口接收到所述请求数据包后,发起一个与第一服务器的第三端口进行通信的新的Socket连接,所述SocketChannel建立模块使用NIO流建立一个SocketChannel模拟Socket通信,所述第二端口与所述第三端口之间建立不断开的连接通道,将所述第二端口通过Socket通信发送的所述请求数据包和与所述第三端口进行通信的所述Socket连接进行绑定。进一步的,所述第一服务器的第一端口、第二端口和第三端口分别为7007、4003和9999端口,所述第二服务器的第四端口为4002端口。本发明具有以下有益效果:本发明提出了通过http实现跨越网闸进行Socket保持连接通信的方法及系统,通过该方法与系统,可以将原本不跨越防火墙与网闸的客户端与业务服务器进行Socket通信的系统,改造为互联网上任意客户端将请求数据包通过套接字发送给指定的网闸外第一服务器,第一服务器通过http协议将数据包发送给网闸内的第二服务器,第二服务器接收请求后,通过Socket连接发送给业务服务器,业务服务器再通过Socket连接返回处理结果,通过同样的机制将数据包发送到网闸外的客户端。此外,通过SocketChannel与存储映射表使得每次通信都保证了Socket连接的同一性,即连接不中断。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。说明书附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。显而易见地,下面描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了根据本发明实施例一的通过http实现跨越网闸进行Socket保持连接通信的方法流程图;图2示出了根据本发明实施例二的通过http实现跨越网闸进行Socket保持连接通信的方法流程图;具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。需要说明的是,在说明书及权利要求当中使用了某些词汇来指称特定组件。本领域技术人员应可以理解,硬件制造商可能会用不同名词来称呼同一个组件。本说明书及权利要求并不以名词的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。如在通篇说明书及权利要求当中所提及的“包含”或“包括”为一开放式用语,故应解释成“包含但不限定于”。说明书后续描述为实施本发明的较佳实施方式,然所述描述乃以说明书的一般原则为目的,并非用以限定本发明的范围。本发明的保护范围当视所附权利要求所界定者为准。为便于对本发明实施例的理解,下面将结合附图以几个具体实施例为例做进一步的解释说明,且各个附图并不构成对本发明实施例的限定。实施例一、通过http实现跨越网闸进行Socket保持连接通信的方法。图1为根据本发明实施例一的通过http实现跨越网闸进行Socket保持连接通信的方法流程图,如图1所示,本发明实施例包括以下步骤:步骤S101:第一服务器的第一端口接收客户端发起的请求,将请求数据包以Socket通信的方式发送给第一服务器的第二端口;步骤S102:所述第二端口接收到所述请求数据包后,建立一SocketChannel使得所述第二端口与第一服务器的第三端口之间建立不断开的连接通道;步骤S103:所述第三端口通过所述连接通道接收到所述请求数据包后,建立与第二服务器进行通信的http请求,将所述第二端口发送过来的所述请求数据包通过所述http请求发送给所述第二服务器的第四端口;步骤S104:所述第二服务器上已经建立存储映射表,所述第四端口接收到所述请求数据包;步骤S105:判断所述客户端IP地址是否存在于所述存储映射表中;如果不存在,则进入下一步,反之跳转到步骤S107;步骤S106:则建立一个新的与业务服务器的Socket连接,发送接收到的所述请求数据包,并将该Socket连接信息以IP地址为主键存储在所述存储映射表中;步骤S107:如果存在,则通过所述IP地址从所述存储映射表中取得已经存在的Socket连接,通过该Socket连接发送接收到的所述请求数据包;步骤S108:所述业务服务器通过原路径的通信方式将处理结果数据包返回到所述客户端。本发明实施例中优选的,所述步骤S101和步骤S102之间还包括:所述第二端口对客户端请求进行监听,一旦监听到客户端请求连接后,启动线程进行Socket通信。本发明实施例中优选的,所述步骤S102具体包括:所述第二端口接收到所述请求数据包后,发起一个与第一服务器的第三端口进行通信的新的Socket连接;使用NIO流建立一个SocketChannel模拟Socket通信,所述第二端口与第一服务器的第三端口之间建立不断开的连接通道;将所述第二端口通过Socket通信发送的所述请求数据包和与所述第三端口进行通信的所述Socket连接进行绑定。本发明实施例中优选的,所述步骤S104中的所述存储映射表,通过客户端IP地址作为主键,存储不同的Socket连接信息。本发明实施例中优选的,所述步骤S107中具体包括:所述业务服务器通过与所述第四端口之间建立的Socket连接进行通信,将处理结果数据包返回到所述第四端口;所述第四端口接收到所述处理结果数据包后,通过http协议回应所述第三端口的http请求,发送所述处理结果数据包;所述第三端口接收到所述处理结果数据包后,通过所述SocketChannel建立的所述连接通道,将所述处理结果数据包以Socket通信的方式发送给所述第二端口;所述第二端口将所述处理结果数据包通过与所述第一端口之间建立的Socket连接返回到客户端。本发明实施例所述方法实现了跨越网闸进行Socket通信,通过在网闸的内外设有第一服务器与第二服务器。第一服务器在网闸外,主要负责接收互联网中任意客户端发起的业务请求,并且使用http协议将该请求数据包发送到网闸内的第二服务器,因此首先需要所述第一服务器能够被运行通过网闸进行通信。所述第一服务器将客户端Socket连接通信的所述请求数据包,通过http协议发送到网闸内所述第二服务器,需要三个端口,分别为7007即所述第一端口,4003即所述第二端口和9999即所述第三端口。第二服务器在网闸内,主要负责接收所述第一服务器发送的http请求数据包,然后通过Socket连接的方式将所述请求数据包发送给业务服务器,业务服务器进行处理后,将处理结果数据包通过Socket连接发送给第二服务器,第二服务器以Socket连接方式接收到数据后,再通过http请求的形式,发送到外网的所述第一服务器。通过http协议,实现了跨越网闸,提供了客户端与业务服务器的通信通道,第二服务器需要一个端口,为4002即所述第四端口。7007端口即所述第一端口主要是接受互联网上任意客户端的请求,然后将请求数据包以Socket通信的方式发送给4003端口即所述第二端口。4003端口即所述第二端口对客户端请求进行监听,一旦客户端请求连接,所述4003端口即所述第二端口就启动线程,进行Socket通信。接收到所述请求数据包后,首先发起一个与9999端口即所述第三端口进行通信的新的Socket连接,然后使用NIO流,建立一个SocketChannel,使用该类模拟Socket通信,建立4003端口即所述第二端口到9999端口即所述第三端口不断开的连接通道,非同步,一次只处理一次连接通信,将4003端口即所述第二端口通过Socket通信发送的数据包和与9999端口即所述第三端口进行通信的Socket连接进行绑定。9999端口即所述第三端口通过所述连接通道,以流的形式接收到Socket通信方式发送的所述请求数据包后,建立与第二服务器进行通信的http请求,将4003端口即所述第二端口发来的数据流通过http请求发送给第二服务器的4002端口即所述第四端口。在所述第二服务器上,已经建立了一个HashMap(即所述的存储映射表),该类中通过IP地址作为主键,存储不同的Socket连接信息。4002端口即所述第四端口通过http请求的形式接受到数据流后,首先判断客户端IP地址是否存在于HashMap中,如果不存在,则建立一个新的与业务服务器的Socket通信连接,发送接收到的数据流,并将该Socket连接信息以IP地址为主键存储在HashMap中。如果发送请求的客户端IP地址已经存在于HashMap中,则通过IP地址从HashMap取得已经存在的Socket连接,通过该连接发送接收到的数据流。所述HashMap是基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用null值和null键。(除了非同步和允许使用null之外,HashMap类与Hashtable大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get和put)提供稳定的性能。迭代collection视图所需的时间与HashMap实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。业务服务器通过与4002端口即所述第四端口建立的Socket连接进行通信,将处理结果返回给4002端口即所述第四端口,4002端口即所述第四端口接收到数据后,通过http协议回应9999端口即所述第三端口的http请求,发送处理结果数据包。9999端口即所述第三端口接收到处理结果数据包后,通过SocketChannel连接通道,将处理结果以Socket通信的方式发送给4003端口即所述第二端口,4003端口即所述第二端口将数据通过与7007端口即所述第一端口之间建立的Socket连接返回给客户端。需要说明的是,本发明实施例中采用的所述第一服务器的第一端口、第二端口和第三端口分别为7007、4003和9999端口,所述第二服务器的第四端口为4002端口,但实际操作中,所述端口可以是任意的,只要是能够通信正常的端口即可。本发明实施例中采用了HashMap来实现所述存储映射表,同样的,所述HashMap也不是唯一的实现方案,只要是通过唯一的key(这里指客户端IP地址)可以映射唯一存储内容(这里指socket连接信息)的实现方案均可。上述过程经历了若干次Socket连接与http请求的转换,但是客户端与业务服务器仍然保证了通过Socket通信的方式发送与接收数据,并且通过SocketChannel与HashMap使得每次通信都保证了Socket连接的同一性,即连接不中断。实施例二、通过http实现跨越网闸进行Socket保持连接通信的方法。图2为根据本发明实施例二的通过http实现跨越网闸进行Socket保持连接通信的方法流程图,包括以下步骤:步骤S201:第一服务器的第一端口接收客户端发起的请求,将请求数据包以Socket通信的方式发送给第一服务器的第二端口;步骤S202:所述第二端口对客户端请求进行监听,监听到客户端请求连接后,启动线程进行Socket通信;步骤S203:所述第二端口接收到所述请求数据包后,发起一个与第一服务器的第三端口进行通信的新的Socket连接,使用NIO流建立一个SocketChannel模拟Socket通信,所述第二端口与所述第三端口之间建立不断开的连接通道,将所述第二端口通过Socket通信发送的所述请求数据包和与所述第三端口进行通信的所述Socket连接进行绑定;步骤S204:所述第三端口通过所述连接通道接收到所述请求数据包后,建立与第二服务器进行通信的http请求,将所述第二端口发送过来的所述请求数据包通过所述http请求发送给所述第二服务器的第四端口;步骤S205:所述第二服务器上已经建立存储映射表,其中所述存储映射表通过IP地址作为主键,存储不同的Socket连接信息,所述第四端口通过所述http请求接收到所述请求数据包;步骤S206:判断所述客户端IP地址是否存在于所述存储映射表中;如果不存在,则进入下一步,反之,跳转到步骤S208;步骤S207:则建立一个新的与业务服务器的Socket连接,发送接收到的所述请求数据包,并将该Socket连接信息以IP地址为主键存储在所述存储映射表中;步骤S208:则通过所述IP地址从所述存储映射表中取得已经存在的Socket连接,通过该Socket连接发送接收到的所述请求数据包;步骤S209:所述业务服务器通过与所述第四端口之间建立的Socket连接进行通信,将处理结果数据包返回到所述第四端口;步骤S210:所述第四端口接收到所述处理结果数据包后,通过http协议回应所述第三端口的http请求,发送所述处理结果数据包;步骤S211:所述第三端口接收到所述处理结果数据包后,通过所述SocketChannel建立的所述连接通道,将所述处理结果数据包以Socket通信的方式发送给所述第二端口;步骤S212:所述第二端口将所述处理结果数据包通过与所述第一端口之间建立的Soket连接返回到客户端。实施例三、通过http实现跨越网闸进行Socket保持连接通信的系统。下面对本发明实施例三的系统进行详细说明。本发明实施例三的通过http实现跨越网闸进行Socket保持连接通信的系统包括:客户端、第一服务器、第二服务器和业务服务器,所述第一服务器和所述第二服务器之间存在网闸,其中:所述第一服务器在网闸外,所述客户端将请求数据包通过Socket方式发送给所述第一服务器,所述第一服务器将来自所述第二服务器的处理结果数据包通过Socket方式发送给所述客户端;所述第二服务器在网闸内,已经建立存储映射表,所述第一服务器与所述第二服务器之间采用http协议的方式进行通信,所述第一服务器将来自所述客户端的所述请求数据包通过第一端口、第二端口和第三端口以http协议的方式发送给所述第二服务器的第四端口,所述第二端口建立一个SocketChannel模拟Socket通信,所述第二端口与所述第三端口之间建立不断开的连接通道,所述第二服务器将来自业务服务器的所述处理结果数据包以http协议的方式发送给所述第一服务器;所述第二服务器与所述业务服务器之间采用Socket连接,所述第二服务器将接收的所述请求数据包发送给所述业务服务器,所述业务服务器对所述请求数据包进行处理,并将处理结果数据包通过Socket方式发送给所述第二服务器。本发明实施例中优选的,还包括一判断模块,所述第四端口通过所述http请求接收到所述请求数据包后,调用所述判断模块判断所述客户端IP地址是否存在于所述存储映射表中;如果不存在,则建立一个新的与业务服务器的Socket连接,发送接收到的所述请求数据包,并将该Socket连接信息以IP地址为主键存储在所述存储映射表中;如果存在,则通过所述IP地址从所述存储映射表中取得已经存在的Socket连接,通过该Socket连接发送接收到的所述请求数据包。本发明实施例中优选的,所述存储映射表通过IP地址作为主键,存储不同的Socket连接信息。本发明实施例中优选的,还包括一SocketChannel建立模块,适用于所述第二端口接收到所述请求数据包后,发起一个与第一服务器的第三端口进行通信的新的Socket连接,所述SocketChannel建立模块使用NIO流建立一个SocketChannel模拟Socket通信,所述第二端口与所述第三端口之间建立不断开的连接通道,将所述第二端口通过Socket通信发送的所述请求数据包和与所述第三端口进行通信的所述Socket连接进行绑定。本发明实施例中优选的,所述第一服务器的第一端口、第二端口和第三端口分别为7007、4003和9999端口,所述第二服务器的第四端口为4002端口。目前的客户端与服务器之间一般采用套接字Socket方式进行网络通信。使用Socket的通信方式,传输速度一般比较快和稳定,但是在很多网络环境尤其是内部网络中都设置了网闸,只允许使用基本端口,如网络浏览端口80,其他端口不允许使用,如即时通信的聊天端口8000,在这种情况下,不能用传输控制协议TCP或者用户数据报协议UDP与服务器进行直接连接。客户端将请求数据包通过套接字Socket连接发送给第一服务器;所述第一服务器以Socket方式接收所述请求数据包,并将所述请求数据包以http协议的方式发送给第二服务器;所述第二服务器以http协议的方式接收所述请求数据包,并通过与业务服务器之间的套接字Socket连接将所述请求数据包发送给所述业务服务器;所述业务服务器对接收的所述请求数据包进行处理,将处理结果的返回数据包通过与所述第二服务器之间的套接字Socket连接发送给所述第二服务器;所述第二服务器以Socket方式接收所述返回数据包,并以http协议的方式将所述返回数据包发送给所述第一服务器;所述第一服务器以http协议的方式接收所述返回数据包,并通过与所述客户端之间的套接字Socket连接将所述返回数据包发送给所述客户端。其中,所述第一服务器与所述第二服务器之间采用http协议的POST方法或者http协议的GET方法传送数据。对于只能使用Socket方式通信的客户端和服务器,当通过互联网连接时,通过Socket与http之间的协议转换,可以实现采用Socket方式连接的客户端和业务服务器穿透网闸通信。其中,客户端为可以远程访问第一服务器的软件模块或硬件设备;第一服务器是一个可以保持Socket连接,并且可以发起http请求、接收http响应返回的外网应用软件模块;第二服务器是一个可以接收和响应http请求,并且可以保持Socket连接的内网应用软件模块;业务服务器为完成业务逻辑的软件模块或硬件设备,其可以通过JMS(JavaMessageService,Java消息服务)应用程序接口进行通信。其中,具体的实施细节如上述方法中所述,在此不再赘述。本发明提出了通过http实现跨越网闸进行Socket保持连接通信的方法及系统,以前只支持在同一网闸内通过Socket连接进行通信,从而完成业务需要,通过本发明所述方法及系统,能够提供互联网上任意用户跨越网闸与防火墙进行Socket通信,并且通信过程中,保证同一IP地址客户端发起的Socket请求也是同一的,同时不需要对原系统进行全面的改造,节省了研发改造成本。本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。当前第1页1 2 3 
山东锦工有限公司
地址:山东省章丘市经济开发区
电话:0531-83825699
传真:0531-83211205
24小时销售服务电话:15066131928