一種基于Android和JXTA協(xié)議模型的無線D2D通信技術(shù)
摘要:移動通信系統(tǒng)的快速發(fā)展使得頻譜資源日益緊缺。D2D通信是一種在系統(tǒng)的控制下,允許終端之間通過復(fù)用小區(qū)資源直接進(jìn)行通信的新型技術(shù)。它能減少小區(qū)網(wǎng)絡(luò)的負(fù)載,還能支持新型的小范圍點(diǎn)對點(diǎn)數(shù)據(jù)通信,是未來綠色通信發(fā)展的趨勢。針對這一新型的通信技術(shù),提出了基于Android OS平臺,以JXTA協(xié)議為模型的無線D2D通信技術(shù),使得移動終端之間能夠進(jìn)行通信與資源共享,并通過網(wǎng)絡(luò)實(shí)驗驗證了其有效性。
關(guān)鍵詞:Android;D2D;JXTA;WiFi;P2P
0 引言
隨著移動通信系統(tǒng)的演進(jìn)和發(fā)展,帶來需求帶寬的迅速增大,但是由于移動通信系統(tǒng)頻譜資源非常有限,可分配的帶寬滿足不了實(shí)際的應(yīng)用需要,所以亟需研究更有效的帶寬分配和利用的技術(shù)。D2D(Device to Device)通信是一種在系統(tǒng)的控制下,允許終端之間通過復(fù)用小區(qū)資源直接進(jìn)行通信的新型技術(shù)。它不依賴中心節(jié)點(diǎn)而是依靠網(wǎng)絡(luò)邊緣節(jié)點(diǎn),實(shí)現(xiàn)自組織與對等協(xié)作的資源發(fā)現(xiàn)和共享,因此擁有自組織、可擴(kuò)展性、魯棒性、容錯性以及負(fù)載均衡等優(yōu)點(diǎn),在一定程度上解決無線通信系統(tǒng)的頻譜資源匱乏的問題,同時它還能減少小區(qū)網(wǎng)絡(luò)的負(fù)載、減少移動終端的電池功耗、增加比特率等,它是未來綠色通信發(fā)展的趨勢。
針對這一新型的通信技術(shù),本文提出了基于WiFi的自組織網(wǎng)絡(luò)的D2D通信模型,能以現(xiàn)有的數(shù)臺近距離智能終端為基礎(chǔ),使得這些終端之間能夠進(jìn)行通信與資源共享。本文基于Android操作系統(tǒng),以JXTA協(xié)議為模型,最終實(shí)現(xiàn)了基于WiFi的D2D通信,并通過網(wǎng)絡(luò)實(shí)驗驗證了其有效性。
1 D2D通信系統(tǒng)模型
該系統(tǒng)實(shí)現(xiàn)手機(jī)等智能終端之間進(jìn)行通信和資源的共享,任務(wù)包括實(shí)現(xiàn)D2D網(wǎng)絡(luò)服務(wù)的架設(shè)、Android平臺的JXTA技術(shù)、網(wǎng)絡(luò)節(jié)點(diǎn)之間的通信、網(wǎng)絡(luò)節(jié)點(diǎn)之間的資源共享。
D2D網(wǎng)絡(luò)主要由3個部分組成,分別是Android平臺節(jié)點(diǎn)、PC平臺節(jié)點(diǎn)和Peer集合點(diǎn),其中Peer集合點(diǎn)負(fù)責(zé)收集和發(fā)送節(jié)點(diǎn)列表信息,起到系統(tǒng)調(diào)度的作用,各節(jié)點(diǎn)可以通過集合點(diǎn)獲取存在的節(jié)點(diǎn)列表,通過該列表,即可對該對等網(wǎng)絡(luò)中的任意節(jié)點(diǎn)進(jìn)行通信,接收和發(fā)送數(shù)據(jù)。系統(tǒng)模型如圖1所示。
該系統(tǒng)主要通過JXTA協(xié)議構(gòu)建一個D2D網(wǎng)絡(luò),在網(wǎng)絡(luò)中設(shè)置有若干個PC機(jī)節(jié)點(diǎn)和手機(jī)節(jié)點(diǎn),每個節(jié)點(diǎn)中都有共享文件,任意節(jié)點(diǎn)可通過D2D網(wǎng)絡(luò)集合點(diǎn)訪問其他節(jié)點(diǎn)的共享資源。系統(tǒng)啟動時首先進(jìn)行初始化,初始化過程會檢查手機(jī)用戶是否通過WiFi連入網(wǎng)絡(luò)、檢查緩存情況、啟動JXTA網(wǎng)絡(luò)連接,啟動之后將搜索JXTA網(wǎng)絡(luò)集合點(diǎn)RDV,讀取集合點(diǎn)上的Peer列表。待初始化完畢之后,各個Peer節(jié)點(diǎn)就可以利用JXTA網(wǎng)絡(luò)提供的管道服務(wù)互相通信了,Peer節(jié)點(diǎn)也可以向RDV節(jié)點(diǎn)請求所有節(jié)點(diǎn)共享的資源文件,資源集合點(diǎn)將相應(yīng)的節(jié)點(diǎn)所共享的資源列表以XML文件的形式反饋給請求節(jié)點(diǎn),接到反饋的資源列表之后,通信系統(tǒng)根據(jù)用戶的選擇,向相應(yīng)的節(jié)點(diǎn)發(fā)送文件傳輸請求,經(jīng)握手后即開始傳輸數(shù)據(jù)。系統(tǒng)的主要流程圖如圖2所示。
[!--empirenews.page--]
2 D2D通信系統(tǒng)的實(shí)現(xiàn)
2.1 接入網(wǎng)的配置
要實(shí)現(xiàn)D2D的通信,終端設(shè)備必須先接入WiFi網(wǎng)絡(luò),因此在程序啟動時,應(yīng)先檢查終端設(shè)備是否已接入網(wǎng)絡(luò),其代碼如下:
若用戶已接入WiFi網(wǎng)絡(luò),則啟動主應(yīng)用程序的UI。在進(jìn)入應(yīng)用程序的主界面之前,需要進(jìn)行系統(tǒng)的初始化,檢查緩存情況,啟動JXTA網(wǎng)絡(luò)連接,搜索JXTA集合點(diǎn)RDV并讀取集合點(diǎn)上的Peer列表。系統(tǒng)的主界面如圖3所示。
[!--empirenews.page--]
2.2 節(jié)點(diǎn)搜索功能
該功能主要用于對網(wǎng)絡(luò)上的Peer節(jié)點(diǎn)進(jìn)行搜索,維護(hù)一個節(jié)點(diǎn)列表。該搜索程序通過JXTA對等機(jī)發(fā)現(xiàn)協(xié)議PDP(Peer Discovery Protoc ol)進(jìn)行節(jié)點(diǎn)搜索,PDP定義了發(fā)現(xiàn)其他Peer和資源的協(xié)議,該協(xié)議包括兩個方面:一方面用于請求獲得其他Peer的Advertisement;另一方面用于響應(yīng)其他Peer的這種請求。Peer給所有已知的Peer和Rendezvous Peer發(fā)送一個Discovery Query Message,Rendezvous Peer對Discove ry請求進(jìn)行處理,并返回一個Discovery Response Message,其中包含其緩存中advertisement。另外它還把這個請求廣播給所有知道的Pe er,收到請求的Peer搜索本地緩存尋找匹配advertisement,如果找到,就直接給最初的請求方發(fā)送一個Discovery Response Message。該程序運(yùn)行在一個線程中,在該線程中執(zhí)行一個循環(huán),每隔30 s獲取一次節(jié)點(diǎn)列表。節(jié)點(diǎn)搜索線程代碼如下:
當(dāng)用戶單擊Peer List菜單選項時,Peer節(jié)點(diǎn)從RDV集合點(diǎn)讀取節(jié)點(diǎn)列表,并顯示在相應(yīng)的UI界面中,如圖4所示。
而網(wǎng)絡(luò)節(jié)點(diǎn)列表收集主要完成啟動并初始化JXTA網(wǎng)絡(luò),形成一個網(wǎng)絡(luò)集合點(diǎn)Rendezvous Peer,集合點(diǎn)服務(wù)的主要功能是允許Peer網(wǎng)絡(luò)上的其他Peer傳播消息。該集合點(diǎn)可以監(jiān)聽到所有相鄰網(wǎng)絡(luò)請求連接的Peer節(jié)點(diǎn),包括PC機(jī)模擬節(jié)點(diǎn)和Android手機(jī)節(jié)點(diǎn),通過一個節(jié)點(diǎn)列表對當(dāng)前節(jié)點(diǎn)的信息進(jìn)行維護(hù),接收節(jié)點(diǎn)的連接與退出請求。當(dāng)用戶單擊Leave Network要離開網(wǎng)絡(luò)時,必須通過advertisement通知RDV節(jié)點(diǎn),此時RDV節(jié)點(diǎn)就可以更新所擁有的節(jié)點(diǎn)列表,當(dāng)其他節(jié)點(diǎn)下一次從RDV節(jié)點(diǎn)讀取節(jié)點(diǎn)列表信息時,就可以及時地更新在線的節(jié)點(diǎn)。
集合點(diǎn)類的設(shè)計主要是通過集合點(diǎn)協(xié)議RVP(Rendezvous Protocol),簡單Peer運(yùn)用該協(xié)議同集合點(diǎn)相連接,由集合點(diǎn)代表自己向其他Peer傳播消息。RVP的實(shí)現(xiàn)扮演雙重角色,為傳播消息提供了統(tǒng)一的API,該功能不依賴Peer是否配置成集合點(diǎn)。
2.3 通信模塊的設(shè)計
通信模塊采用JXTA雙向管道進(jìn)行消息傳輸。當(dāng)用戶登錄之后,啟動一個線程,在線程里創(chuàng)建JxtaServerPipe,不停輪詢,等待其他用戶發(fā)來的消息。當(dāng)用戶A想與用戶B聊天時,只要建立一個到用戶B的JxtaBiDiPipe,該JxtaBiDiPipe和用戶B的JxtaServerPipe進(jìn)行連接。聊天消息是用XML進(jìn)行封裝的,不同的消息可以定義不同的命名空間,以便接收端進(jìn)行區(qū)別。而且一條消息可以包含多部分信息,比如區(qū)分消息的版本、消息發(fā)送者名字等等。接收端對接收到的消息進(jìn)行解析處理,然后顯示到聊天對話界面里。
信息發(fā)送的源代碼(信息接收的實(shí)現(xiàn)類似)如下:
[!--empirenews.page--]
2.4 文件發(fā)送與接收
文件發(fā)送的實(shí)現(xiàn)是利用P2PSocket編寫的程序,可以在任意Peer之間對等地傳輸文件。該程序通過JXTA管道綁定協(xié)議,由Pipe向遠(yuǎn)程Pee*r發(fā)送文件,文件將以流的形式傳遞通過PipeMsgEvent實(shí)現(xiàn)PipeMsgListener,每次當(dāng)有消息傳送到管道的時候,事件將被捕獲。通過fileRequest處理共享文件列表的請求,向?qū)Ψ桨l(fā)送包含共享文件名的列表的消息在一個線程中執(zhí)行一個循環(huán),通過JXTA網(wǎng)絡(luò)進(jìn)行文件資源廣播,如果得到回應(yīng)就進(jìn)行資源請求確認(rèn),確認(rèn)完成之后調(diào)用this,socket Service.file Transfer()函數(shù)發(fā)送當(dāng)前文件資源。
文件發(fā)送的源代碼如下:
當(dāng)單擊File Share菜單選項時,會顯示出當(dāng)前網(wǎng)絡(luò)中的節(jié)點(diǎn)所共享的文件,如圖5所示。
當(dāng)用戶可以選中其中的某一個文件,JXTA網(wǎng)絡(luò)利用Pipe從共享該文件的節(jié)點(diǎn)那里讀取數(shù)據(jù)并存儲在本機(jī)的SD卡上,文件接收的代碼和發(fā)送的類似。
3 結(jié)語
本文研究并設(shè)計實(shí)現(xiàn)了基于Android操作系統(tǒng),以JXTA協(xié)議為模型,應(yīng)用WiFi網(wǎng)絡(luò)的無線D2D通信系統(tǒng)。該系統(tǒng)能以現(xiàn)有的數(shù)臺近距離的智能手機(jī)為基礎(chǔ),建立起一個無線P2P網(wǎng)絡(luò),使得這些用戶之間能夠方便地進(jìn)行通信與資源共享,這將成為諸多用戶豐富自身手機(jī)資源的有效途徑。