解决端口冲突的方法及计算机可读存储介质与流程

文档序号:13142159阅读:377来源:国知局
解决端口冲突的方法及计算机可读存储介质与流程

本发明涉及通信技术领域,尤其涉及一种解决端口冲突的方法及计算机可读存储介质。



背景技术:

基于tcp/ip协议网络传输由服务端和客户端组成,不管是使用udp还是使用tcp协议进行传输,服务端都需要先绑定端口进行监听,客户端再跟服务端绑定的端口进行通信。目前,服务端绑定的端口是与客户端预先约好的固定的端口,不可改变。端口是操作系统共享资源,运行在操作系统之上的程序需要网络通信时都可以选择一个可用端口进行绑定,但如果指定端口,如5231被程序a绑定独占使用,那么程序b如果也想绑定在端口5231,就会引发端口冲突,导致绑定失败。

目前,解决端口冲突的惯用方法是:程序进行网络通信绑定端口时发现端口被占用,就显示界面告知用户,引导用户退出相应程序释放端口。但该方法需要用户干预解决,用户体验不够友好,且用户可能不希望退出占用端口的程序。



技术实现要素:

本发明所要解决的技术问题是:提供一种解决端口冲突的方法及计算机可读存储介质,可避免端口冲突,提高用户体验。

为了解决上述技术问题,本发明采用的技术方案为:一种解决端口冲突的方法,包括:

服务端随机选择一个可用端口进行绑定;

客户端与服务器所在设备的端口建立连接;

若连接成功,则客户端通过所述连接发送预设的询问消息至连接对端;

客户端接收连接对端发送的反馈消息,并对所述反馈消息进行识别;

若识别正确,则判定所述连接对应的端口为服务端绑定的端口。

本发明还涉及一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现以下步骤:

服务端随机选择一个可用端口进行绑定;

客户端与服务器所在设备的端口建立连接;

若连接成功,则客户端通过所述连接发送预设的询问消息至连接对端;

客户端接收连接对端发送的反馈消息,并对所述反馈消息进行识别;

若识别正确,则判定所述连接对应的端口为服务端绑定的端口。

本发明的有益效果在于:服务端先选择一个可用端口进行绑定,避免绑定到已被占用的端口;客户端通过尝试建立连接,发送消息,检测接收到的消息是否正确来寻找服务端,使得客户端无需与服务端预先约定好固定的通信端口,从而避免端口冲突的问题;本发明可避免端口冲突,且可避免因端口冲突而造成软件无法正常运行或需退出其他程序才能运行的问题,提高应用程序的稳定性,同时无需用户干预操作,提高用户体验。

附图说明

图1为本发明一种解决端口冲突的方法的流程图;

图2为本发明实施例一的方法流程图。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。

本发明最关键的构思在于:服务端先选择一个可用端口进行绑定,客户端通过遍历端口建立连接、识别连接对端返回的反馈消息来匹配服务端绑定的端口。

请参阅图1,一种解决端口冲突的方法,包括:

服务端随机选择一个可用端口进行绑定;

客户端与服务器所在设备的端口建立连接;

若连接成功,则客户端通过所述连接发送预设的询问消息至连接对端;

客户端接收连接对端发送的反馈消息,并对所述反馈消息进行识别;

若识别正确,则判定所述连接对应的端口为服务端绑定的端口。

从上述描述可知,本发明的有益效果在于:可避免端口冲突,且可避免因端口冲突而造成软件无法正常运行或需退出其他程序才能运行的问题,提高应用程序的稳定性。

进一步地,所述“客户端通过所述连接发送预设的询问消息至连接对端”之后,进一步包括:

连接对端识别所述询问消息;

若识别失败,则连接对端丢弃所述询问消息或发送反馈消息至客户端;

若识别成功,则连接对端发送预设的反馈消息至客户端。

由上述描述可知,询问消息可以被正确服务端识别,无法被错误服务端识别,且只有正确服务端才能发送正确的反馈消息,错误服务端无法发送。

进一步地,所述“客户端接收连接对端发送的反馈消息,并对所述反馈消息进行识别”具体为:

若客户端在预设的时间内未接收到连接对端发送的反馈消息,则客户端与下一端口建立连接;

若客户端在预设的时间内接收到连接对端发送的反馈消息,则对所述反馈消息进行识别。

由上述描述可知,当连接对端丢弃询问消息而没有发送反馈消息时,客户端等待超时后即判定连接对端不是对应的服务端,尝试连接下一个端口。

进一步地,所述“客户端与服务器所在设备的端口建立连接”具体为:

客户端遍历服务端所在设备的端口;

客户端与一端口建立连接;

若连接失败,则客户端与下一端口建立连接。

由上述描述可知,通过遍历端口,依次与端口建立连接,从而匹配到服务端绑定的端口。

进一步地,所述“服务端随机选择一个可用端口进行绑定;客户端与服务器所在设备的端口建立连接”具体为:

服务端从预设的端口范围中随机选择一个可用端口进行绑定;

客户端与服务器所在设备的预设的端口范围中的端口建立连接。

由上述描述可知,可大大减少尝试连接次数,提高端口匹配效率。

进一步地,所述“客户端与服务器所在设备的端口建立连接”具体为:

若客户端与服务端部署在同一台设备上,则客户端获取操作系统已使用的端口;

客户端与所述已使用的端口建立连接。

由上述描述可知,可进一步减少尝试连接次数,进一步提高端口匹配效率。

本发明还提出了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现以下步骤:

服务端随机选择一个可用端口进行绑定;

客户端与服务器所在设备的端口建立连接;

若连接成功,则客户端通过所述连接发送预设的询问消息至连接对端;

客户端接收连接对端发送的反馈消息,并对所述反馈消息进行识别;

若识别正确,则判定所述连接对应的端口为服务端绑定的端口。

进一步地,所述“客户端通过所述连接发送预设的询问消息至连接对端”之后,进一步包括:

连接对端识别所述询问消息;

若识别失败,则连接对端丢弃所述询问消息或发送反馈消息至客户端;

若识别成功,则连接对端发送预设的反馈消息至客户端。

进一步地,所述“客户端接收连接对端发送的反馈消息,并对所述反馈消息进行识别”具体为:

若客户端在预设的时间内未接收到连接对端发送的反馈消息,则客户端与下一端口建立连接;

若客户端在预设的时间内接收到连接对端发送的反馈消息,则对所述反馈消息进行识别。

进一步地,所述“客户端与服务器所在设备的端口建立连接”具体为:

客户端遍历服务端所在设备的端口;

客户端与一端口建立连接;

若连接失败,则客户端与下一端口建立连接。

进一步地,所述“服务端随机选择一个可用端口进行绑定;客户端与服务器所在设备的端口建立连接”具体为:

服务端从预设的端口范围中随机选择一个可用端口进行绑定;

客户端与服务器所在设备的预设的端口范围中的端口建立连接。

进一步地,所述“客户端与服务器所在设备的端口建立连接”具体为:

若客户端与服务端部署在同一台设备上,则客户端获取操作系统已使用的端口;

客户端与所述已使用的端口建立连接。

实施例一

请参照图2,本发明的实施例一为:一种解决端口冲突的方法,所述方法基于tcp/ip协议网络传输,包括如下步骤:

s1:服务端随机选择一个可用端口进行绑定;

s2:客户端遍历服务端所在设备的端口,即遍历服务端所在机器上的端口1025至端口65535;

s3:客户端与一端口建立连接;

s4:判断是否连接成功,进一步地,通过判断所述一端口是否被绑定来判断是否连接成功,若所述一端口未被绑定,则判定连接失败,客户端与下一端口建立连接,即返回执行步骤s3,若所述一端口已被绑定,则判定连接成功,执行步骤s5。

s5:客户端通过所述连接发送预设的询问消息至连接对端;

s6:连接对端识别所述询问消息,判断是否识别成功,若否,执行步骤s7,若是,执行步骤s8。

s7:连接对端丢弃所述询问消息或发送反馈消息至客户端;执行步骤s9;

s8:连接对端发送预设的反馈消息至客户端;执行步骤s9;

s9:判断客户端是否在预设的时间内接收到连接对端发送的反馈消息,若是,执行步骤s10,若否,则客户端与下一端口建立连接,即执行步骤s3;

s10:客户端对所述反馈消息进行识别,判断是否识别正确,即判断所述反馈消息是否为预设的反馈消息,若是,则执行步骤s11,若否,则客户端与下一端口建立连接,即执行步骤s3;

s11:判定所述一端口,即当前连接的端口为服务端绑定的端口,后续客户端可通过所述连接与服务端进行网络通信。

其中,步骤s1-s2中,服务端可从预设的端口范围中随机选择一个可用端口进行绑定,客户端与服务器所在设备的预设的端口范围中的端口建立连接。也就是说,服务端和客户端可以预先约定端口绑定规则,比如服务端从端口20000开始绑定,如果端口被占用就绑定下一个端口直至绑定成功为止,客户端就可以从端口20000开始遍历并尝试建立连接,可大大减少尝试连接次数,提高端口匹配效率。

进一步地,若客户端与服务端部署在同一台设备上,则客户端获取操作系统已使用的端口;客户端与所述已使用的端口建立连接。也就是说,如果客户端和服务端是部署在同一台机器上,则步骤s2可在进一步优化,客户端直接获取操作系统已使用的端口列表,再逐一尝试连接这些端口,可进一步减少尝试连接次数。

更进一步地,步骤s2中,为了提高匹配效率,客户端可以同时开启多个线程,同时对多个端口尝试建立连接,每个线程都执行步骤s3-s11,从而加快端口匹配速度。

对于步骤s6-s8,连接对端接收到询问消息后,可能会有以下三种处理情况:

a、无法识别询问消息,丢弃;

b、无法识别询问消息,返回错误的反馈消息;

c、正确识别询问消息,返回正确的反馈消息。

进一步地,步骤s5中,客户端按照预定义好的协议发送询问消息来询问连接对端是否为对应的服务端。其中,协议设计需要满足两个条件,一是询问消息可以被正确服务端识别,而错误服务端无法识别;二是只有正确服务端才能发送正确的反馈消息,而错误服务端无法发送。

例如,询问消息中可以包含约定好的guid值57d38aba-4d98-4233-8096-968c75e1dee4,反馈消息中包含guid值57d38aba-4d98-4233-8096-968c75e1dee4的md5值490da9b2d88ffc9abc4e538df2b9d020,因为协议不是标准的,错误服务器一般无法识别询问消息,反馈的询问结果也不可能是正确的反馈消息,但是正确服务器能识别询问消息而且可以正确响应反馈消息。

本实施例中,服务端先选择一个可用端口进行绑定,避免绑定到已被占用的端口;客户端通过消息验证和反馈验证获取到服务端所绑定的端口,使得客户端无需与服务端预先约定好固定的通信端口,从而避免端口冲突的问题;同时,避免因端口冲突而造成软件无法正常运行或需退出其他程序才能运行的问题,提高应用程序的稳定性,同时无需用户干预操作,提高用户体验。

实施例二

本实施例为上述实施例的一具体应用场景。

现在软件复杂度很高,为了降低复杂度,将一个软件分成多个模块,模块与模块之间必然存在交互。如果模块与模块之间是程序与程序,那么程序间需要进行进程间通信,进程间通信采用本地tcp网络通信,简单实现方案是交互程序之间约定好通信端口,建立连接进行通信,约定的端口难免会存在端口冲突导致无法建立连接,通过本实施例即可解决该问题。

假设程序a作为服务端,随机选择了一个可用端口(比如20034)绑定监听;程序b作为客户端,启动后获取操作系统当前已使用的端口列表,比如12345、12458、20034、45678等,其中20034也必然在已用的端口列表中。

程序b尝试tcp连接端口12345,连接成功后,程序b发送询问消息,消息内容使用json格式{"type":"query","guid":"57d38aba-4d98-4233-8096-968c75e1dee4"},使用端口12345的程序无法解析json格式内容而丢弃,可能会发送反馈消息给程序b,也可能不发送反馈消息给程序b。如果不发送反馈消息给程序b,程序b等待超时后尝试tcp连接下一个端口,即端口12458;如果发送反馈消息给程序b,程序b无法正确解析询问消息而丢弃也尝试tcp连接下一个端口,即端口12458。

使用端口12458的程序也无法解析程序b发送的询问消息,程序b尝试tcp连接20034,接成功后,程序b发送询问消息,消息内容与上述json格式内容一样,程序a收到询问消息后解析出guid值为57d38aba-4d98-4233-8096-968c75e1dee4后发送反馈消息给程序b,反馈消息也采用json格式{"type":"query","md5":"490da9b2d88ffc9abc4e538df2b9d020"},程序b接收到反馈消息后正确解析出md5为490da9b2d88ffc9abc4e538df2b9d020,则认为找到了正确的服务端,无需再尝试连接检测,后续客户端可使用该端口与服务端建立通信连接,进行网络通信。

实施例三

本实施例是对应上述实施例的一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现以下步骤:

服务端随机选择一个可用端口进行绑定;

客户端与服务器所在设备的端口建立连接;

若连接成功,则客户端通过所述连接发送预设的询问消息至连接对端;

客户端接收连接对端发送的反馈消息,并对所述反馈消息进行识别;

若识别正确,则判定所述连接对应的端口为服务端绑定的端口。

进一步地,所述“客户端通过所述连接发送预设的询问消息至连接对端”之后,进一步包括:

连接对端识别所述询问消息;

若识别失败,则连接对端丢弃所述询问消息或发送反馈消息至客户端;

若识别成功,则连接对端发送预设的反馈消息至客户端。

进一步地,所述“客户端接收连接对端发送的反馈消息,并对所述反馈消息进行识别”具体为:

若客户端在预设的时间内未接收到连接对端发送的反馈消息,则客户端与下一端口建立连接;

若客户端在预设的时间内接收到连接对端发送的反馈消息,则对所述反馈消息进行识别。

进一步地,所述“客户端与服务器所在设备的端口建立连接”具体为:

客户端遍历服务端所在设备的端口;

客户端与一端口建立连接;

若连接失败,则客户端与下一端口建立连接。

进一步地,所述“服务端随机选择一个可用端口进行绑定;客户端与服务器所在设备的端口建立连接”具体为:

服务端从预设的端口范围中随机选择一个可用端口进行绑定;

客户端与服务器所在设备的预设的端口范围中的端口建立连接。

进一步地,所述“客户端与服务器所在设备的端口建立连接”具体为:

若客户端与服务端部署在同一台设备上,则客户端获取操作系统已使用的端口;

客户端与所述已使用的端口建立连接。

综上所述,本发明提供的一种解决端口冲突的方法及计算机可读存储介质,服务端先选择一个可用端口进行绑定,避免绑定到已被占用的端口;客户端通过尝试建立连接,发送消息,检测接收到的消息是否正确来寻找服务端,使得客户端无需与服务端预先约定好固定的通信端口,从而避免端口冲突的问题;本发明可避免端口冲突,且可避免因端口冲突而造成软件无法正常运行或需退出其他程序才能运行的问题,提高应用程序的稳定性,同时无需用户干预操作,提高用户体验。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1