基于JXTA的P2P即时通信软件的Java实现研究

2018-04-24 05:01王建
无线互联科技 2018年4期

王建

摘 要:JXTA是Sun公司专为P2P应用程序所搭建的一个平台,该平台可通过Java实现。通过JXTA平台中的6大协议、3大层,运用Java编程语言,能够实现基于多个peer节点的P2P即时通信。其中即时通信模块是该软件的核心部分,利用JXTA平台提供的服务构建一个输入管道与输出管道,设计一个JXTASocket包,将peer接口方法整合到该软件包内,即可循环完成即时通信。文章基于JXTA平台,利用平台的JAVA绑定,设计了一款混合型的P2P即时通信软件,真正实现了P2P跨网络的即时通信。

关键词:JXTA;P2P;即时通信软件;Java实现

P2P是Peer-to-Peer,是一种对等网络工作模式,在此模式下,能够将服务器弱化或者完全取消,所有结点均是服务器与客户机的结合,是对等关系。P2P网络具有良好的扩展性,能够更好地利用网络边缘资源,避免发生单点故障,是当前互联网领域应用广泛的一种模式[1]。

1 JXTA平台

JXTA平台是一个专为P2P网络应用的开发所设计的平台,既能够为P2P网络的构建提供一组协议,又能够为P2P应用程序的开发提供一个平台,能够提供基于Java语言的应用程序编程接口(Application Programming Interface,API)。JXTA协议能够支持多种对等点之间的直接通信,无需经过中心服务器,即可相互发现并完成通信。其核心构件包括peer(对等点),如PC机、传感器或移动通信设备等能够实现JXTA协议的实体;peer group(对等组),目的相同的对等点集合形成的一个跨越不同物理网络的组;Service(服务),对等点与对等组均能够提供服务,对等点独立提供一个peer服务,对等组则由整个组提供一个peer group服务;Pipe(管道),对等点之间的虚拟连接,是JXTA信息在各个节点之间发送与接收的途径;Message(信息),JXTA平台可以通过XML方式与二进制方式传递信息;Advicement(广告),利用XML文档的方式交换JXTA中所有可用的信息,可以是一个对等点、一个对等组、一个管道或者一个服务的信息[2]。

2 基于JXTA的P2P即时通信软件的Java实现

2.1 peer接口的设计

JXTA中的peer之间通过Pipe完成通信,各Pipe都是通过相同的通信连接方式与过程运行的,因此,可以将peer节点的连接设计为一个JXTASocket包,用以封装全部的peer通信。该包中包含public interface peer{、public boolean bind()(peer和输入管道绑定,并开始执行监听功能)、public void run()(发送和输入管道绑定的信息)、public boolean connect()(绑定输出管道,并构建通信连接)、public boolean sendMessage()(利用输出管道发送信息)、public void setOutListener()(设定输出管道的监听器)、public void setInListener()(设定输入管道的监听器)、public void createGroup()(建立对等组)、public void joinGroup()(加入对等组)、public void leaveGroup()(离开对等组)、public boolean searchGroupWithName()(搜索对等组)、public boolean searchPeerWithName()(搜索对等点)等方法。

2.2 聊天信息即时通信的实现流程

(1)通过DiscoveryService构建一个信息输入管道:以 pipeSvc.createInputPipe()。(2)执行监听,设定一个输入管道Listener,设定public void pipeMsgEvent()的方法,消息到来时,该程序就会自动监听。(3)解析收到的信息,利用信息解析协议,通过String userName,String sendContent对消息进行解析。(4)与监听到的管道通知进行连接,并构建一个信息输出管道pipeOutService.createOutputPipe()。(5)在输出管道中利用newChatMessage()的方法發送信息,先将信息全部封装为new Message,再利用输出管道将其发送出去。(6)在信息到达输入管道时,再调用pipeMsgEvent()的方法,获取、解析、显示即时信息,完成这一步,即完成了一次完整的即时通信。这一流程的反复运行,即是P2P即时通信系统的实现。

2.3 文件传输即时通信的实现

(1)通过输入管道捕获一个文件列表共享请求,并将共享列表发送出去,利用public void doFileListRequest()的方法完成。(2)捕获文件列表,并显示可供共享的一个文件列表,利用public void doFileList()的方法完成。(3)捕获对等体共享文件下载请求,分析其请求的文件名,并生成文件流的相应信息,再发送给对方,利用public void doFileListDownloadRequest()的方法完成。(4)捕获文件流的对应信息后,解析可供下载的文件名,再存储,public void doFileListDownload()的接口完成。(5)捕获上传后的文件流信息,分析文件名,再完成存储,public void doFileListUpload()的接口完成。

2.4 输入管道的构建步骤

(1)对于对等点发送的信息,首先要构建一个管道广告,再发布该广告PipeAdvertisement myadv,并设定该广告的ID及管道信息myadv.setPipeID,myadv.setName,在设定广告类型时,可选择一对多的广播型管道,也可选择一对一的单播型管道。(2)发布广告,让相互通信的对等点能够发现该广告,DiscoveryService可用于该类服务,设定disco.publish,disco.remotePublish的接口。(3)通过PipeService构建一个基于该广告的对应输入管道,并指定对应的监听器,即可等待消息到达,并实现即时通信。

2.5 GUI图形界面的创建

GUI图形界面为整个IM系统的模型,是用户登录整个系统时的初始运行模块,包含了登录模块、即时通信模块、文件传輸模块、组管理模块和用户查找模块,各模块对应不同的peer接口,完成整个系统的交互通信与显示。

2.6 GUI界面与通信软件的链接

通过IDE开发工具导入GUI界面,修改通信软件生成构造器。将构造器建在源程序中,通过public VSJ Chat()代码导入GUI界面,采用个性化的方法localinit()建立初始化代码,建立发送者的名字MySenderName=""或发送群的名字MyGroupName=""。通过Beaninit()的方法调用对等机或群名,激活特定群中连接的对等机平台,将IM系统加入到用户名已知的IM会话平台中,即可构建信息输入管道与输出管道发送或接收信息。

2.7 该软件的技术优势

该软件的设定基于JXTA平台本身提供的能够无视系统、语言、服务器的网络限制等,为多个对等点提供一个最为实用、简捷的即时通信功能,既能够用于聊天,也能够用于文件传输。用户信息与索引均无需借助服务器进行存储,软件在运行时对服务器的依赖性极低,即使服务器受到攻击,也不会影响软件的继续运行。用户在交换信息时,不需要有确定的准确地址,能够跨过防火墙及NAT设备,实现畅通交流。用户通过JXTA平台能够真正实现peer-to-peer的对等通信,对于编程语言、开发平台及传输协议无依赖性,能够接入任意数字设备,无需在指定的PC机或其他平台上接入。用户的即时通信无需借助网络,TCP/IP,蓝牙,HTTP或者家庭网络等都能够即时传送信息,借助于JXTA提供的6大协议,在相同网络中的对等点可以方便地进行通信,真正实现了分布式的P2P通信。目前JXTA平台自身即提供了Java语言绑定,在任意JXTA平台运行P2P程序都能够直接按照自身喜好配置网络环境,通过该平台强大的网络环境跨越能力,穿越各种网络防火墙、网段、服务器代理等不同的网络环境,实现即时通信,并利用Java绑定轻松的创建输入与输出管道,实现即时通信[3]。

3 实验结果

在JXTA平台上运行GUI界面,弹出配置器后,根据步骤与要求设置各项参数,完成初始化配置,并将配置文件存储于.JXTA目录中,以用于之后使用时的用户名与密度提醒。根据局域网要求设置测试参数,建立集合点runit.bat文件,运行该文件,即可根据代码提供建立一个Jxta通信群,以此作为群集合点。根据对等机的数量,开始运行各个对等点,每个对等点均对应一个runit.bat文件,逐个完成设置,即可运行,再利用之前建立的管道与广告运行命令就可以在不同的对等点之间进行即时通信。在通信过程中,需利用Recdezvous Peer将接收到的各对等机的广告进行缓存,以便突破内网限制并发现所创建的PeerGroup。创建管道广告(Pipe Advereisement),并使有固定的管道ID。利用PeerGroup与PipeAdvereisement构建即时通信的虚拟通道。在两台机器中分别建立一个JxtaSocket,两台机器均建立代码getInputStream()与getOutputStream(),以获得输入管道与输出管道的广告信息,并进行读出与写入操作,进而实现了两台不同机器的P2P即时通信。

4 结语

本文设计了一个使用Java语言的基于JXTA的P2P混合型即时通信软件,通过Java语言、JXTA提供的六大协议与服务,能够自由地构建输入管道与输出管道,从而完成对等组、对等点之间的广告、消息和文件传输,为小型合作组的交流提供了一个更为友好的平台。

[参考文献]

[1]卿琳.基于JXTA的P2P即时通信软件的Java实现[J].现代电子技术,2010(14):136-139.

[2]骆开华.基于JXTA平台的P2P应用实例的设计与实现[J].电脑知识与技术,2009(13):3362-3363.

[3]冯君.基于JXTA的即时通信系统研究与实现[J].滨州学院学报,2014(6):92-97.