《电子技术应用》
您所在的位置:首页 > 通信与网络 > 设计应用 > 基于JXTA的无线D2D通信系统的研究与实现
基于JXTA的无线D2D通信系统的研究与实现
来源:微型机与应用2013年第16期
魏恒璐,卢选民
(西北工业大学 电子信息学院,陕西 西安710129)
摘要: 移动通信技术的迅速发展使得频谱资源日益紧缺,人们对了解附近感兴趣的事物并与之通信的需求日渐增加,这些问题对现有的通信方式提出了挑战。D2D通信在系统的控制下复用小区资源,能够减小小区网络的负载,实现端到端直接通信及资源共享。研究并设计实现了以JXTA协议为基础、以WiFi为通信媒质、以Android OS为运行平台的无线D2D通信系统。
Abstract:
Key words :

摘  要: 移动通信技术的迅速发展使得频谱资源日益紧缺,人们对了解附近感兴趣的事物并与之通信的需求日渐增加,这些问题对现有的通信方式提出了挑战。D2D通信在系统的控制下复用小区资源,能够减小小区网络的负载,实现端到端直接通信及资源共享。研究并设计实现了以JXTA协议为基础、以WiFi为通信媒质、以Android OS为运行平台的无线D2D通信系统。
关键词: D2D(Device to Device);JXTA;WiFi;Android

    移动通信系统的演进和发展呈现许多新特点。一方面有限的带宽资源满足不了实际的应用需要,另一方面社交网络、朋友间近距离资源共享、本地广告等应用的流行使得人们对了解附近感兴趣的事物并与之通信的需求逐渐增加。同时,在智能家居、安全监控等M2M应用中,网关和传感器之间需要一种能够令距离较近的设备之间高效通信的技术手段。D2D通信是一种在系统控制下复用小区资源的技术。在系统的控制下实现设备到设备直接通信而不必经过基站,能够减小小区网络的负载,增加蜂窝通信系统频谱效率,在一定程度上解决无线通信系统的频谱资源匮乏的问题。同时具有干扰可控、减少移动终端的电池功耗等优点。目前,国际标准化组织已经开始研究D2D技术,3GPP也引入了WiFi进行数据通信的方案。可以预见D2D技术将会有广阔的前景。
    JXTA是SUN公司推出的一组P2P组网规范,提供了开发基于P2P应用程序的基本组件[1]。JXTA独立于操作系统与编程语言,因此JXTA应用能运行于所有实现该协议的平台。JXTA也是网络无关的,JXTA能利用TCP/IP、HTTP等传输协议和蓝牙、WiFi等传输媒质传输。因此位于不同平台甚至不同网络的对等体可以通过标准JXTA协议通信。利用JXTA开发D2D系统可以屏蔽传输协议和传输方式,从更高的层次构建系统。
    本文研究并设计实现了以JXTA协议为基础、以WiFi为通信媒质、以Android OS为运行平台的无线D2D通信系统,并通过网络实验验证了其有效性。
1 D2D通信系统模型
    本系统主要用来实现智能终端间的通信和文件共享。D2D网络中实现了一个或多个JXTA协议的设备称为对等体(Peer)。由于JXTA协议的平台无关性,网络中的对等体可以是手机、PC或其他智能设备。对等体之间可以相互通信,共享对方的资源。系统模型如图1所示。

    D2D网络采用半分布式结构。网络中的集合点是一个特殊的对等体,相当于C/S模式下的服务器[2]。不同之处在于,D2D网络中任何对等体都可以是集合点,其与普通对等体的比例可以人为设置。集合点负责收集和发送对等体列表和资源信息,起到系统调度的作用。对等体可以通过集合点获取存在的对等体列表和资源列表。对等体获得列表后,就可访问D2D网络中的任意对等体,向目标对等体发送聊天信息,以及获取感兴趣的资源。
    系统主要分为对等体发现、聊天和文件共享3个部分。打开应用程序后,系统首先检查是否已接入WiFi网络,若未接入,会提醒用户接入网络。连上WiFi后开始加入JXTA网络,搜索网络集合点RDV,读取上面的对等体列表。聊天功能用绑定好的管道服务实现。文件共享时,用户节点需向集合点请求附近节点的资源列表。集合点收到请求信息后,以xml格式反馈资源列表。这时,用户根据列表信息向相关节点发送文件传输请求,经握手后就可以传输文件。JXTA通信模型如图2所示。

2 D2D通信系统的实现
    与JXTA通信模型对应,通信系统的软件实现由网络配置模块、对等体发现模块、聊天模块、文件共享模块和用户界面模块5个模块组成。
2.1 网络配置
    应用程序启动后,系统检查当前网络配置。若WiFi网络不可用,则提醒用户重新配置网络[3-4]。
    若用户已接入WiFi网络,系统会完成检查缓存情况、启动JXTA网络连接、搜索JXTA集合点RDV并读取集合点上的对等体列表等初始化操作。初始化完成后进入用户界面。判断是否有可用WiFi网络过程如下:
    (1)创建网络连接管理对象,判断是否有网络连接:
    ConnectivityManager mConnectivityManager=
    (ConnectivityManager)context.getSystemService
(Context.CONNECTIVITY_SERVICE);
    获取网络信息:
    NetworkInfo mNetworkInfo=
    mConnectivityManager.getActiveNetworkInfo();
    判断网络是否连接:
    return mNetworkInfo.isAvailable();
    若网络没有连接,则提醒用户。
    (2)判断网络是否可用:
    NetworkInfo mWiFiNetworkInfo=
    mConnectivityManager.getNetworkInfo
(ConnectivityManager.TYPE_WiFi);
    return mWiFiNetworkInfo.isAvailable();
    若网络不可用,提醒用户接入可用网络。
2.2 对等体发现
    该对等体的发现与查找用对等机发现协议(Peer Discovery Protocol)实现。Advertisement是对等体之间各种信息交流的基本单元,发现其他Peer及其资源的问题就转换为发现描述各资源的Advertisement的问题,只要找到对应的Advertisement,就相当于找到了该资源。PDP定义了发现其他Peer和资源的协议,该协议包括两个方面[2],一方面用于请求获得其他Peer的Advertisement;另一方面用于响应其他Peer的这种请求。对等体发现过程如下:
    (1)系统启动时,先加入一个公共组来获得对等组提供的发现服务:
    PeerGroup  netPeerGroup=
    PeerGroupFactory.newNetPeerGroup();
    (2)发布上线Advertisement,加入D2D网络:
    public void remotePublish(Advertisement adv,int type);
    (3)利用对等体发现服务向集合点请求对等体列表:
    discovery=netPeerGroup.getDiscoveryService();
    discovery.addDiscoveryListener(this);
    discovery.getRemoteAdvertisements(null,
DiscoveryService.PEER,null,null);
    发现过程中添加了监听器,每当收到集合点的反馈消息时就可以立即捕获并处理。发现过程每隔30 s执行一次,用来获取最新对等体列表。
2.3 聊天模块
    聊天模块用来实现点对点的文字传输,文字编码采用UTF-8。消息通过JxtaBiDiPipe、JxtaServerPipe双向管道传输。待发送的消息经XML打包后经管道传输给接收方。接收方解析出该消息的内容,根据消息内容做相应的处理。消息中包含有发送者信息及所有用户都遵守的其他操作信息,若是聊天信息则把消息显示到UI。因此可以通过扩充消息规范增强管道通信的能力。JxtaBiDiPipe、JxtaServerPipe与java JDK里的Socket和ServerSocket非常类似。聊天模块实现过程如下:
    (1)用户上线后需获得一个JxtaServerPipe实例:
    JxtaServerPipe serverPipe=
    new  JxtaServerPipe(netPeerGroup,pipeAdv);
    上述对象用来监听端口的连接。获得发送方通信请求后生成用于通信的管道:
    JxtaBiDiPipe   bidipipe=serverPipe.accept();
    accept()方法在获得发送方连接之前都处于阻塞状态。
    (2)用户需要发送消息时,主动获得发送管道:
    JxtaBiDiPipi bidipipe=
    new JxtaBiDiPipe(peergroup,pipeAdv,20000,this,true);
    (3)上述(1)中的对象监听到(2)中对象的连接请求,获得接收管道,此时双方可以互相通信。
    (4)收到的消息放到接收队列里,根据用户的输入及消息的内容把消息显示在UI或触发其他期望的动作。聊天界面如图3所示。

 

 

    与单向管道(InputPipe、OutputPipe)的异步不可靠传输(类似于UDP)对应,双向同步管道提供了安全、可靠的传输机制,适用于传输文字、图片等小批量内容。
2.4 文件共享
    文件共享用来获得节点共享的文件。与聊天模块不同的是,对等体需先得到资源列表,确定所需要的资源后再建立与目标对等体的连接。文件传输及其资源获取通过p2psocket开发包实现[5]。文件传输过程如下:
    (1)对等体A向对等体B和集合点发送资源列表请求。请求信息用BaseMessage类或其子类实现。
    (2)集合点与对等体B均有用pipeMsgEvent实现的接口PipeMsgListener,每当有消息传送到输入管道时,事件被捕获。若捕获到的消息是共享列表请求,则集合点与对等体B通过doFileListRequest( )函数向A发送一个包含文件共享列表的消息。
    (3)对等体A通过自己的pipeMsgEvent接收到文件列表,并显示。用户选中感兴趣的文件并向对等体B发送文件下载请求。如图4所示。

    (4)对等体捕获下载共享文件的请求后,先分析出对方请求的文件名,随后利用doFileDownloadRequest( )函数将指定文件流打包成BaseMessage,并发送给对方。
    (5)对等体A捕获包含下载文件流的消息后,先分析出下载文件的名字,然后存储到文件中。
    (6)对等体B与A握手后,调用fileTransfer( )函数,以流的形式将文件传输给A,A也以流的形式接收文件,并通过File类及缓冲流把缓冲区的文件转换成磁盘中的文件。
    本文研究并设计实现了以JXTA协议为基础,以WiFi为通信媒质,以Android OS为运行平台的无线D2D通信系统。该系统能以现有的数台近距离的智能手机为基础,建立起一个无线D2D 网络,使得这些用户之间能够方便地进行通信与资源共享,这将成为诸多用户丰富自身手机资源的有效途径。
参考文献
[1] BROOKSHIER D著.Java P2P程序设计[M].常晓波,李静,译.北京:中国电力出版社,2002.
[2] OAKS S,TRAVERSAT B,Li Gong,著.JXTA技术手册[M]. 技桥,译.北京:清华大学出版社,2004.
[3] 张利国,代闻,龚海平.Android移动开发案例详解[M]. 北京:人民邮电出版社,2010.
[4] 余志龙,陈昱勋,郑名杰,等编著.Google Android SDK开发案例大全(第2版)[M].北京:人民邮电出版社,2011.
[5] 许斌.JXTA-Java P2P网络编程技术[M].北京:清华大学出版社,2003.

此内容为AET网站原创,未经授权禁止转载。