0 引言
随着移动通信系统的演进和发展,带来需求带宽的迅速增大,但是由于移动通信系统频谱资源非常有限,可分配的带宽满足不了实际的应用需要,所以亟需研究更有效的带宽分配和利用的技术。D2D(Device to Device)通信是一种在系统的控制下,允许终端之间通过复用小区资源直接进行通信的新型技术。它不依赖中心节点而是依靠网络边缘节点,实现自组织与对等协作的资源发现和共享,因此拥有自组织、可扩展性、鲁棒性、容错性以及负载均衡等优点,在一定程度上解决无线通信系统的频谱资源匮乏的问题,同时它还能减少小区网络的负载、减少移动终端的电池功耗、增加比特率等,它是未来绿色通信发展的趋势。
针对这一新型的通信技术,本文提出了基于WiFi的自组织网络的D2D通信模型,能以现有的数台近距离智能终端为基础,使得这些终端之间能够进行通信与资源共享。本文基于Android操作系统,以JXTA协议为模型,最终实现了基于WiFi的D2D通信,并通过网络实验验证了其有效性。
1 D2D通信系统模型
该系统实现手机等智能终端之间进行通信和资源的共享,任务包括实现D2D网络服务的架设、Android平台的JXTA技术、网络节点之间的通信、网络节点之间的资源共享。
D2D网络主要由3个部分组成,分别是Android平台节点、PC平台节点和Peer集合点,其中Peer集合点负责收集和发送节点列表信息,起到系统调度的作用,各节点可以通过集合点获取存在的节点列表,通过该列表,即可对该对等网络中的任意节点进行通信,接收和发送数据。系统模型如图1所示。
该系统主要通过JXTA协议构建一个D2D网络,在网络中设置有若干个PC机节点和手机节点,每个节点中都有共享文件,任意节点可通过D2D网络集合点访问其他节点的共享资源。系统启动时首先进行初始化,初始化过程会检查手机用户是否通过WiFi连入网络、检查缓存情况、启动JXTA网络连接,启动之后将搜索JXTA网络集合点RDV,读取集合点上的Peer列表。待初始化完毕之后,各个Peer节点就可以利用JXTA网络提供的管道服务互相通信了,Peer节点也可以向RDV节点请求所有节点共享的资源文件,资源集合点将相应的节点所共享的资源列表以XML文件的形式反馈给请求节点,接到反馈的资源列表之后,通信系统根据用户的选择,向相应的节点发送文件传输请求,经握手后即开始传输数据。系统的主要流程图如图2所示。2 D2D通信系统的实现
2.1 接入网的配置
要实现D2D的通信,终端设备必须先接入WiFi网络,因此在程序启动时,应先检查终端设备是否已接入网络,其代码如下:
若用户已接入WiFi网络,则启动主应用程序的UI。在进入应用程序的主界面之前,需要进行系统的初始化,检查缓存情况,启动JXTA网络连接,搜索JXTA集合点RDV并读取集合点上的Peer列表。系统的主界面如图3所示。
2.2 节点搜索功能
该功能主要用于对网络上的Peer节点进行搜索,维护一个节点列表。该搜索程序通过JXTA对等机发现协议PDP(Peer Discovery Protoc ol)进行节点搜索,PDP定义了发现其他Peer和资源的协议,该协议包括两个方面:一方面用于请求获得其他Peer的Advertisement;另一方面用于响应其他Peer的这种请求。Peer给所有已知的Peer和Rendezvous Peer发送一个Discovery Query Message,Rendezvous Peer对Discove ry请求进行处理,并返回一个Discovery Response Message,其中包含其缓存中advertisement。另外它还把这个请求广播给所有知道的Pe er,收到请求的Peer搜索本地缓存寻找匹配advertisement,如果找到,就直接给最初的请求方发送一个Discovery Response Message。该程序运行在一个线程中,在该线程中执行一个循环,每隔30 s获取一次节点列表。节点搜索线程代码如下:
当用户单击Peer List菜单选项时,Peer节点从RDV集合点读取节点列表,并显示在相应的UI界面中,如图4所示。
而网络节点列表收集主要完成启动并初始化JXTA网络,形成一个网络集合点Rendezvous Peer,集合点服务的主要功能是允许Peer网络上的其他Peer传播消息。该集合点可以监听到所有相邻网络请求连接的Peer节点,包括PC机模拟节点和Android手机节点,通过一个节点列表对当前节点的信息进行维护,接收节点的连接与退出请求。当用户单击Leave Network要离开网络时,必须通过advertisement通知RDV节点,此时RDV节点就可以更新所拥有的节点列表,当其他节点下一次从RDV节点读取节点列表信息时,就可以及时地更新在线的节点。
集合点类的设计主要是通过集合点协议RVP(Rendezvous Protocol),简单Peer运用该协议同集合点相连接,由集合点代表自己向其他Peer传播消息。RVP的实现扮演双重角色,为传播消息提供了统一的API,该功能不依赖Peer是否配置成集合点。
2.3 通信模块的设计
通信模块采用JXTA双向管道进行消息传输。当用户登录之后,启动一个线程,在线程里创建JxtaServerPipe,不停轮询,等待其他用户发来的消息。当用户A想与用户B聊天时,只要建立一个到用户B的JxtaBiDiPipe,该JxtaBiDiPipe和用户B的JxtaServerPipe进行连接。聊天消息是用XML进行封装的,不同的消息可以定义不同的命名空间,以便接收端进行区别。而且一条消息可以包含多部分信息,比如区分消息的版本、消息发送者名字等等。接收端对接收到的消息进行解析处理,然后显示到聊天对话界面里。
信息发送的源代码(信息接收的实现类似)如下:
2.4 文件发送与接收
文件发送的实现是利用P2PSocket编写的程序,可以在任意Peer之间对等地传输文件。该程序通过JXTA管道绑定协议,由Pipe向远程Pee*r发送文件,文件将以流的形式传递通过PipeMsgEvent实现PipeMsgListener,每次当有消息传送到管道的时候,事件将被捕获。通过fileRequest处理共享文件列表的请求,向对方发送包含共享文件名的列表的消息在一个线程中执行一个循环,通过JXTA网络进行文件资源广播,如果得到回应就进行资源请求确认,确认完成之后调用this,socket Service.file Transfer()函数发送当前文件资源。
文件发送的源代码如下:
当单击File Share菜单选项时,会显示出当前网络中的节点所共享的文件,如图5所示。
当用户可以选中其中的某一个文件,JXTA网络利用Pipe从共享该文件的节点那里读取数据并存储在本机的SD卡上,文件接收的代码和发送的类似。
3 结语
本文研究并设计实现了基于Android操作系统,以JXTA协议为模型,应用WiFi网络的无线D2D通信系统。该系统能以现有的数台近距离的智能手机为基础,建立起一个无线P2P网络,使得这些用户之间能够方便地进行通信与资源共享,这将成为诸多用户丰富自身手机资源的有效途径。