一种面向PC客户端的服务器的socket通信方法与流程

文档序号:11234482阅读:412来源:国知局
一种面向PC客户端的服务器的socket通信方法与流程

本发明涉及数据通信领域,特别涉及一种面向pc客户端的服务器的socket通信方法。



背景技术:

现有技术中,面向pc客户端的服务器的通信方法包括单工通信、半双工通信和全双工通信三种。单工通信是指消息只能单方向传输的工作方式。半双工通信可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。全双工通信是指在通信的任意时刻,允许数据同时在两个方向上传输。但是,一般的通信方法在速度和效率方面并不理想。



技术实现要素:

本发明提供了一种面向pc客户端的服务器的socket通信方法,解决了现有技术通信方法的速度和效率并不理想的技术问题。

本发明解决上述技术问题的技术方案如下:一种面向pc客户端的服务器的socket通信方法,包括:

s1、启动新线程,根据预定参数创建面向pc客户端的服务器的socket处理器对象,同时启动新线程创建socket连接监视器对象,所述预定参数包括:服务类型、服务器监听地址、服务器监听端口、连接设定参数、消息格式变换处理类以及消息处理器;

s2、在所述socket处理器对象中,创建服务器socket通道对象、服务器socket连接对象和事件选择器,并将所述服务器socket通道对象设置为非阻塞模式,将所述服务器socket连接对象与所述监听地址和所述监听端口进行绑定;

s3、在所述事件选择器中,为所述服务器socket通道对象注册客户端请求连接事件;

s4、启动新线程,根据所述服务器socket通道对象、所述服务器socket对象和所述事件选择器创建并启动服务器socket运行对象,接收第一客户端发送的连接请求事件,生成第一socket连接对象和所述第一socket通道对象,与所述第一客户端建立socket连接;

s5、连接成功后,通过所述第一socket连接对象和所述第一socket通道对象与所述第一客户端进行数据交互,同时将所述第一socket连接对象添加到所述socket连接监视器对象的socket连接监视列表中,以对所述第一socket连接对象的连接状态进行监视。

本发明的有益效果是:相比现有的通信方法,本技术方案通过在服务器为客户端生成socket通道对象和socket连接对象,与客户端建立socket连接和数据交互,提高了数据交互的速度和效率。

在上述技术方案的基础上,本发明还可以做如下改进。

优选地,步骤s4中,接收第一客户端发送的连接请求事件,生成第一socket连接对象和所述第一socket通道对象,与所述第一客户端建立socket连接的方法包括:

a1、当所述服务器socket通道对象接收到所述第一客户端发送的连接请求事件时,将所述连接请求事件报告给所述事件选择器;

a2、当所述事件选择器接收到所述连接请求事件时,创建第一socket连接对象和第一socket通道对象,生成第一连接id,将所述第一socket通道对象作为所述第一socket连接对象的通信通道;

a3、通过所述第一socket通道对象和所述第一socket连接对象与所述第一客户端建立socket连接。

优选地,步骤s5中,连接成功之后,通过第一socket连接对象和所述第一socket通道对象与所述第一客户端进行数据交互之前,还包括:

b1、在所述事件选择器中为所述第一socket通道对象注册读事件,并给所述第一socket通道对象返回读事件选择键;

b2、将所述读事件选择键与所述第一socket连接对象的关系保存到连接对象列表中。

优选地,步骤s5中,通过第一socket连接对象和所述第一socket通道对象与所述第一客户端进行数据交互的方法包括:

c1、当所述第一socket通道对象接收到所述第一客户端发送的读请求事件时,将所述读请求事件报告给所述事件选择器,通过所述事件选择器将所述读事件选择键放入事件对象集合中;

c2、当所述服务器需要向所述第一客户端写入数据时,在所述事件选择器中为所述第一socket通道对象注册写事件,并给所述第一socket通道对象返回写事件选择键;

c3、当所述第一socket通道对象与所述第一客户端的socket通道对象的写操作准备就绪时,在所述事件选择器中生成可写事件,将所述写事件选择键放入所述事件对象集合中;

c4、轮询所述事件对象集合,当询查到所述读事件选择键时,启动第一线程,处理所述读事件选择键对应的所述读请求事件,当询查到所述写事件选择键时,启动第二线程,处理所述写事件选择键对应的所述可写事件。

优选地,步骤c4中,启动第一线程,处理所述读事件选择键对应的所述读请求事件的方法包括:

d1、从线程池启动第一线程,根据所述读事件选择键与所述第一socket连接对象的关系定位所述第一socket连接对象和所述第一socket通道对象;

d2、从所述第一socket通道对象中读取到字节流格式的第一数据块;

d3、调用所述消息格式变换处理类的数据格式转换方法将所述第一数据块转化为消息格式的第一消息;

d4、调用所述第一socket连接对象的消息处理方法处理所述第一消息,并通过所述第一socket通道对象将所述处理结果发送给所述第一客户端的socket通道对象,结束所述第一线程。

优选地,步骤c4中,启动第二线程,处理所述写事件选择键对应的所述可写事件的方法包括:

e1、从线程池启动第二线程,从数据缓存区中读取到消息格式的第二消息;

e2、调用所述消息格式变换处理类的数据格式转换方法将所述第二消息转化为字节流格式的第二数据块;

e3、调用底层的写数据流方法将所述第二数据块写入所述第一socket通道对象中,并通过所述第一socket通道对象发送到所述第一客户端的socket通道对象,结束第二线程。

优选地,步骤s5中,通过所述socket连接监视器对象对所述socket连接监视列表中的每个socket连接对象的连接状态进行监视的方法包括:

f1、定时启动所述socket连接监视器对象中的检查socket连接的任务;

f2、循环获取所述socket连接监视列表中的每个socket连接对象;

f3、通过每个socket连接对象向对应的客户端发送ping消息,判断是否接收到应答消息,如是则表示该socket连接对象为连接状态;否则表示该socket连接对象为未连接状态,删除该socket连接对象。

优选地,步骤s4中,如果接收到多个客户端发送的连接请求事件,则为每个客户端生成各自的socket连接对象和socket通道对象,同时与多个客户端建立socket连接。

附图说明

图1为本发明实施例提供的一种面向pc客户端的服务器的socket通信方法的流程示意图;

图2为本发明另一实施例提供的一种面向pc客户端的服务器的socket通信方法的流程示意图;

图3为本发明另一实施例提供的一种面向pc客户端的服务器的socket通信方法的流程示意图;

图4为本发明另一实施例提供的一种面向pc客户端的服务器的socket通信方法的流程示意图;

图5为本发明另一实施例提供的一种面向pc客户端的服务器的socket通信方法的流程示意图;

图6为本发明另一实施例提供的一种面向pc客户端的服务器的socket通信方法的流程示意图;

图7为本发明另一实施例提供的一种面向pc客户端的服务器的socket通信方法的流程示意图;

图8为本发明另一实施例提供的pc客户端与服务器的socket通信过程的示意图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

如图1所示,提供一种面向pc客户端的服务器的socket通信方法,包括:

s1、启动新线程,根据预定参数创建面向pc客户端的服务器的socket处理器对象,同时启动新线程创建socket连接监视器对象,预定参数包括:服务类型、服务器监听地址、服务器监听端口、连接设定参数、消息格式变换处理类以及消息处理器;

s2、在socket处理器对象中,创建服务器socket通道对象、服务器socket连接对象和事件选择器,并将服务器socket通道对象设置为非阻塞模式,将服务器socket连接对象与监听地址和监听端口进行绑定;

s3、在事件选择器中,为服务器socket通道对象注册客户端请求连接事件;

s4、启动新线程,根据服务器socket通道对象、服务器socket对象和事件选择器创建并启动服务器socket运行对象,接收第一客户端发送的连接请求事件,生成第一socket连接对象和第一socket通道对象,与第一客户端建立socket连接;

s5、连接成功后,通过第一socket连接对象和第一socket通道对象与第一客户端进行数据交互,同时将第一socket连接对象添加到socket连接监视器对象的socket连接监视列表中,以对第一socket连接对象的连接状态进行监视。

具体地,服务器先创建socket处理器对象,然后在socket处理器对象中,创建服务器socket通道对象、服务器socket连接对象和事件选择器,为后续连接作准备工作,服务器在接收客户端发送的连接请求之前,需要为服务器socket通道对象在事件选择器中注册一个客户端请求连接事件,在服务器socket通道对象接收到客户端发送的连接请求时,将该连接请求报告给事件选择器,事件选择器为该客户端生成一个连接id和用于通信的socket连接对象和socket通道对象,然后,通过服务器生成的socket连接对象和socket通道对象与客户端的socket连接对象和socket通道对象进行通信。同时,将该socket连接对象添加到socket连接监视器对象的socket连接监视列表中,通过socket连接监视器对象定时对socket连接监视列表中的所有socket连接对象进行连接检查,删除未连接上或失效的对象。

上述实施例中,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket),socket本质是编程接口,对tcp/ip的封装,tcp/ip也要提供可供程序员做网络开发所用的接口,这就是socket编程接口,socket用于描述ip地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。socket非常类似于电话插座。以一个国家级电话网为例,电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。假如对方在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。

具体地,如图2所示,步骤s4中,接收第一客户端发送的连接请求事件,生成第一socket连接对象和第一socket通道对象,与第一客户端建立socket连接的方法包括:

a1、当服务器socket通道对象接收到第一客户端发送的连接请求事件时,将连接请求事件报告给事件选择器;

a2、当事件选择器接收到连接请求事件时,创建第一socket连接对象和第一socket通道对象,生成第一连接id,将第一socket通道对象作为第一socket连接对象的通信通道;

a3、通过第一socket通道对象和第一socket连接对象与第一客户端建立socket连接。

具体地,服务器在接收客户端发送的连接请求之前,需要为服务器socket通道对象在事件选择器中注册一个客户端请求连接事件,在服务器socket通道对象接收到客户端发送的连接请求时,将该连接请求报告给事件选择器,事件选择器为该客户端生成一个连接id和用于通信的socket连接对象和socket通道对象,然后,通过服务器生成的socket连接对象和socket通道对象与客户端的socket连接对象和socket通道对象进行通信。

具体地,如图3所示,步骤s5中,连接成功之后,通过第一socket连接对象和第一socket通道对象与第一客户端进行数据交互之前,还包括:

b1、在事件选择器中为第一socket通道对象注册读事件,并给第一socket通道对象返回读事件选择键;

b2、将读事件选择键与第一socket连接对象的关系保存到连接对象列表中。

具体地,在服务器接收客户端发送的读请求之前,需要为第一socket通道对象在事件选择器中注册一个感兴趣的读事件,同时事件选择器给第一socket通道对象返回一个读事件选择键,在第一socket通道对象接收到客户端的socket通道对象发送过来的读请求时,上报给事件选择器,事件选择器就将第一socket通道对象对应的读事件选择键放入事件对象集合中,事件对象集合中包括需要进行处理的读事件或写事件。最后,将读事件选择键与第一socket连接对象的关系保存到连接对象列表中,用于后续根据读事件选择键定位第一socket连接对象。

具体地,如图4所示,步骤s5中,通过第一socket连接对象和第一socket通道对象与第一客户端进行数据交互的方法包括:

c1、当第一socket通道对象接收到第一客户端发送的读请求事件时,将读请求事件报告给事件选择器,通过事件选择器将读事件选择键放入事件对象集合中;

c2、当服务器需要向第一客户端写入数据时,在事件选择器中为第一socket通道对象注册写事件,并给第一socket通道对象返回写事件选择键;

c3、当第一socket通道对象与第一客户端的socket通道对象的写操作准备就绪时,在事件选择器中生成可写事件,将写事件选择键放入事件对象集合中;

c4、轮询事件对象集合,当询查到读事件选择键时,启动第一线程,处理读事件选择键对应的读请求事件,如图5所示,包括:

d1、从线程池启动第一线程,根据读事件选择键与第一socket连接对象的关系定位第一socket连接对象和第一socket通道对象;

d2、从第一socket通道对象中读取到字节流格式的第一数据块;

d3、调用消息格式变换处理类的数据格式转换方法将第一数据块转化为消息格式的第一消息;

d4、调用第一socket连接对象的消息处理方法处理第一消息,并通过第一socket通道对象将处理结果发送给第一客户端的socket通道对象,结束第一线程。

当询查到写事件选择键时,启动第二线程,处理写事件选择键对应的可写事件,如图6所示,包括:

e1、从线程池启动第二线程,从数据缓存区中读取到消息格式的第二消息;

e2、调用消息格式变换处理类的数据格式转换方法将第二消息转化为字节流格式的第二数据块;

e3、调用底层的写数据流方法将第二数据块写入第一socket通道对象中,并通过第一socket通道对象发送到第一客户端的socket通道对象,结束第二线程。

具体地,当服务器需要向第一客户端写入数据时,在事件选择器中为第一socket通道对象注册一个写事件,并给第一socket通道对象返回写事件选择键,当第一socket通道对象与第一客户端的socket通道对象的写操作准备就绪时,在事件选择器中生成可写事件,将写事件选择键放入事件对象集合中,只有两边的通道对象均准备就绪,才能将数据写入通道对象中。可以看出,处理读事件选择键对应的读请求事件的过程与处理写事件选择键对应的可写事件的过程是通过不同线程完成的,两者可以并行处理,从而提高处理效率。

具体地,如图7所示,步骤s5中,通过socket连接监视器对象对socket连接监视列表中的每个socket连接对象的连接状态进行监视的方法包括:

f1、定时启动socket连接监视器对象中的检查socket连接的任务;

f2、循环获取socket连接监视列表中的每个socket连接对象;

f3、通过每个socket连接对象向对应的客户端发送ping消息,判断是否接收到应答消息,如是则表示该socket连接对象为连接状态;否则表示该socket连接对象为未连接状态,删除该socket连接对象。

具体地,socket连接监视器对象用于定时检查socket连接对象的连接状态,删除未连接或连接失效的socket连接对象。

具体地,步骤s4中,如果接收到多个客户端发送的连接请求事件,则为每个客户端生成各自的socket连接对象和socket通道对象,同时与多个客户端建立socket连接。如图8所示,服务器为每个客户端在服务器本地生成一个socket连接对象和socket通道对象,实现一个服务器与多个客户端的通信。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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