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