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網絡,使得這些用戶之間能夠方便地進行通信與資源共享,這將成為諸多用戶豐富自身手機資源的有效途徑。