《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于JXTA的無線D2D通信系統(tǒng)的研究與實(shí)現(xiàn)
NI-LabVIEW 2025
基于JXTA的無線D2D通信系統(tǒng)的研究與實(shí)現(xiàn)
來源:微型機(jī)與應(yīng)用2013年第16期
魏恒璐,盧選民
(西北工業(yè)大學(xué) 電子信息學(xué)院,陜西 西安710129)
摘要: 移動(dòng)通信技術(shù)的迅速發(fā)展使得頻譜資源日益緊缺,人們對(duì)了解附近感興趣的事物并與之通信的需求日漸增加,這些問題對(duì)現(xiàn)有的通信方式提出了挑戰(zhàn)。D2D通信在系統(tǒng)的控制下復(fù)用小區(qū)資源,能夠減小小區(qū)網(wǎng)絡(luò)的負(fù)載,實(shí)現(xiàn)端到端直接通信及資源共享。研究并設(shè)計(jì)實(shí)現(xiàn)了以JXTA協(xié)議為基礎(chǔ)、以WiFi為通信媒質(zhì)、以Android OS為運(yùn)行平臺(tái)的無線D2D通信系統(tǒng)。
Abstract:
Key words :

摘  要: 移動(dòng)通信技術(shù)的迅速發(fā)展使得頻譜資源日益緊缺,人們對(duì)了解附近感興趣的事物并與之通信的需求日漸增加,這些問題對(duì)現(xiàn)有的通信方式提出了挑戰(zhàn)。D2D通信在系統(tǒng)的控制下復(fù)用小區(qū)資源,能夠減小小區(qū)網(wǎng)絡(luò)的負(fù)載,實(shí)現(xiàn)端到端直接通信及資源共享。研究并設(shè)計(jì)實(shí)現(xiàn)了以JXTA協(xié)議為基礎(chǔ)、以WiFi為通信媒質(zhì)、以Android OS為運(yùn)行平臺(tái)的無線D2D通信系統(tǒng)。
關(guān)鍵詞: D2D(Device to Device);JXTA;WiFi;Android

    移動(dòng)通信系統(tǒng)的演進(jìn)和發(fā)展呈現(xiàn)許多新特點(diǎn)。一方面有限的帶寬資源滿足不了實(shí)際的應(yīng)用需要,另一方面社交網(wǎng)絡(luò)、朋友間近距離資源共享、本地廣告等應(yīng)用的流行使得人們對(duì)了解附近感興趣的事物并與之通信的需求逐漸增加。同時(shí),在智能家居、安全監(jiān)控等M2M應(yīng)用中,網(wǎng)關(guān)和傳感器之間需要一種能夠令距離較近的設(shè)備之間高效通信的技術(shù)手段。D2D通信是一種在系統(tǒng)控制下復(fù)用小區(qū)資源的技術(shù)。在系統(tǒng)的控制下實(shí)現(xiàn)設(shè)備到設(shè)備直接通信而不必經(jīng)過基站,能夠減小小區(qū)網(wǎng)絡(luò)的負(fù)載,增加蜂窩通信系統(tǒng)頻譜效率,在一定程度上解決無線通信系統(tǒng)的頻譜資源匱乏的問題。同時(shí)具有干擾可控、減少移動(dòng)終端的電池功耗等優(yōu)點(diǎn)。目前,國際標(biāo)準(zhǔn)化組織已經(jīng)開始研究D2D技術(shù),3GPP也引入了WiFi進(jìn)行數(shù)據(jù)通信的方案。可以預(yù)見D2D技術(shù)將會(huì)有廣闊的前景。
    JXTA是SUN公司推出的一組P2P組網(wǎng)規(guī)范,提供了開發(fā)基于P2P應(yīng)用程序的基本組件[1]。JXTA獨(dú)立于操作系統(tǒng)與編程語言,因此JXTA應(yīng)用能運(yùn)行于所有實(shí)現(xiàn)該協(xié)議的平臺(tái)。JXTA也是網(wǎng)絡(luò)無關(guān)的,JXTA能利用TCP/IP、HTTP等傳輸協(xié)議和藍(lán)牙、WiFi等傳輸媒質(zhì)傳輸。因此位于不同平臺(tái)甚至不同網(wǎng)絡(luò)的對(duì)等體可以通過標(biāo)準(zhǔn)JXTA協(xié)議通信。利用JXTA開發(fā)D2D系統(tǒng)可以屏蔽傳輸協(xié)議和傳輸方式,從更高的層次構(gòu)建系統(tǒng)。
    本文研究并設(shè)計(jì)實(shí)現(xiàn)了以JXTA協(xié)議為基礎(chǔ)、以WiFi為通信媒質(zhì)、以Android OS為運(yùn)行平臺(tái)的無線D2D通信系統(tǒng),并通過網(wǎng)絡(luò)實(shí)驗(yàn)驗(yàn)證了其有效性。
1 D2D通信系統(tǒng)模型
    本系統(tǒng)主要用來實(shí)現(xiàn)智能終端間的通信和文件共享。D2D網(wǎng)絡(luò)中實(shí)現(xiàn)了一個(gè)或多個(gè)JXTA協(xié)議的設(shè)備稱為對(duì)等體(Peer)。由于JXTA協(xié)議的平臺(tái)無關(guān)性,網(wǎng)絡(luò)中的對(duì)等體可以是手機(jī)、PC或其他智能設(shè)備。對(duì)等體之間可以相互通信,共享對(duì)方的資源。系統(tǒng)模型如圖1所示。

    D2D網(wǎng)絡(luò)采用半分布式結(jié)構(gòu)。網(wǎng)絡(luò)中的集合點(diǎn)是一個(gè)特殊的對(duì)等體,相當(dāng)于C/S模式下的服務(wù)器[2]。不同之處在于,D2D網(wǎng)絡(luò)中任何對(duì)等體都可以是集合點(diǎn),其與普通對(duì)等體的比例可以人為設(shè)置。集合點(diǎn)負(fù)責(zé)收集和發(fā)送對(duì)等體列表和資源信息,起到系統(tǒng)調(diào)度的作用。對(duì)等體可以通過集合點(diǎn)獲取存在的對(duì)等體列表和資源列表。對(duì)等體獲得列表后,就可訪問D2D網(wǎng)絡(luò)中的任意對(duì)等體,向目標(biāo)對(duì)等體發(fā)送聊天信息,以及獲取感興趣的資源。
    系統(tǒng)主要分為對(duì)等體發(fā)現(xiàn)、聊天和文件共享3個(gè)部分。打開應(yīng)用程序后,系統(tǒng)首先檢查是否已接入WiFi網(wǎng)絡(luò),若未接入,會(huì)提醒用戶接入網(wǎng)絡(luò)。連上WiFi后開始加入JXTA網(wǎng)絡(luò),搜索網(wǎng)絡(luò)集合點(diǎn)RDV,讀取上面的對(duì)等體列表。聊天功能用綁定好的管道服務(wù)實(shí)現(xiàn)。文件共享時(shí),用戶節(jié)點(diǎn)需向集合點(diǎn)請(qǐng)求附近節(jié)點(diǎn)的資源列表。集合點(diǎn)收到請(qǐng)求信息后,以xml格式反饋資源列表。這時(shí),用戶根據(jù)列表信息向相關(guān)節(jié)點(diǎn)發(fā)送文件傳輸請(qǐng)求,經(jīng)握手后就可以傳輸文件。JXTA通信模型如圖2所示。

2 D2D通信系統(tǒng)的實(shí)現(xiàn)
    與JXTA通信模型對(duì)應(yīng),通信系統(tǒng)的軟件實(shí)現(xiàn)由網(wǎng)絡(luò)配置模塊、對(duì)等體發(fā)現(xiàn)模塊、聊天模塊、文件共享模塊和用戶界面模塊5個(gè)模塊組成。
2.1 網(wǎng)絡(luò)配置
    應(yīng)用程序啟動(dòng)后,系統(tǒng)檢查當(dāng)前網(wǎng)絡(luò)配置。若WiFi網(wǎng)絡(luò)不可用,則提醒用戶重新配置網(wǎng)絡(luò)[3-4]。
    若用戶已接入WiFi網(wǎng)絡(luò),系統(tǒng)會(huì)完成檢查緩存情況、啟動(dòng)JXTA網(wǎng)絡(luò)連接、搜索JXTA集合點(diǎn)RDV并讀取集合點(diǎn)上的對(duì)等體列表等初始化操作。初始化完成后進(jìn)入用戶界面。判斷是否有可用WiFi網(wǎng)絡(luò)過程如下:
    (1)創(chuàng)建網(wǎng)絡(luò)連接管理對(duì)象,判斷是否有網(wǎng)絡(luò)連接:
    ConnectivityManager mConnectivityManager=
    (ConnectivityManager)context.getSystemService
(Context.CONNECTIVITY_SERVICE);
    獲取網(wǎng)絡(luò)信息:
    NetworkInfo mNetworkInfo=
    mConnectivityManager.getActiveNetworkInfo();
    判斷網(wǎng)絡(luò)是否連接:
    return mNetworkInfo.isAvailable();
    若網(wǎng)絡(luò)沒有連接,則提醒用戶。
    (2)判斷網(wǎng)絡(luò)是否可用:
    NetworkInfo mWiFiNetworkInfo=
    mConnectivityManager.getNetworkInfo
(ConnectivityManager.TYPE_WiFi);
    return mWiFiNetworkInfo.isAvailable();
    若網(wǎng)絡(luò)不可用,提醒用戶接入可用網(wǎng)絡(luò)。
2.2 對(duì)等體發(fā)現(xiàn)
    該對(duì)等體的發(fā)現(xiàn)與查找用對(duì)等機(jī)發(fā)現(xiàn)協(xié)議(Peer Discovery Protocol)實(shí)現(xiàn)。Advertisement是對(duì)等體之間各種信息交流的基本單元,發(fā)現(xiàn)其他Peer及其資源的問題就轉(zhuǎn)換為發(fā)現(xiàn)描述各資源的Advertisement的問題,只要找到對(duì)應(yīng)的Advertisement,就相當(dāng)于找到了該資源。PDP定義了發(fā)現(xiàn)其他Peer和資源的協(xié)議,該協(xié)議包括兩個(gè)方面[2],一方面用于請(qǐng)求獲得其他Peer的Advertisement;另一方面用于響應(yīng)其他Peer的這種請(qǐng)求。對(duì)等體發(fā)現(xiàn)過程如下:
    (1)系統(tǒng)啟動(dòng)時(shí),先加入一個(gè)公共組來獲得對(duì)等組提供的發(fā)現(xiàn)服務(wù):
    PeerGroup  netPeerGroup=
    PeerGroupFactory.newNetPeerGroup();
    (2)發(fā)布上線Advertisement,加入D2D網(wǎng)絡(luò):
    public void remotePublish(Advertisement adv,int type);
    (3)利用對(duì)等體發(fā)現(xiàn)服務(wù)向集合點(diǎn)請(qǐng)求對(duì)等體列表:
    discovery=netPeerGroup.getDiscoveryService();
    discovery.addDiscoveryListener(this);
    discovery.getRemoteAdvertisements(null,
DiscoveryService.PEER,null,null);
    發(fā)現(xiàn)過程中添加了監(jiān)聽器,每當(dāng)收到集合點(diǎn)的反饋消息時(shí)就可以立即捕獲并處理。發(fā)現(xiàn)過程每隔30 s執(zhí)行一次,用來獲取最新對(duì)等體列表。
2.3 聊天模塊
    聊天模塊用來實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的文字傳輸,文字編碼采用UTF-8。消息通過JxtaBiDiPipe、JxtaServerPipe雙向管道傳輸。待發(fā)送的消息經(jīng)XML打包后經(jīng)管道傳輸給接收方。接收方解析出該消息的內(nèi)容,根據(jù)消息內(nèi)容做相應(yīng)的處理。消息中包含有發(fā)送者信息及所有用戶都遵守的其他操作信息,若是聊天信息則把消息顯示到UI。因此可以通過擴(kuò)充消息規(guī)范增強(qiáng)管道通信的能力。JxtaBiDiPipe、JxtaServerPipe與java JDK里的Socket和ServerSocket非常類似。聊天模塊實(shí)現(xiàn)過程如下:
    (1)用戶上線后需獲得一個(gè)JxtaServerPipe實(shí)例:
    JxtaServerPipe serverPipe=
    new  JxtaServerPipe(netPeerGroup,pipeAdv);
    上述對(duì)象用來監(jiān)聽端口的連接。獲得發(fā)送方通信請(qǐng)求后生成用于通信的管道:
    JxtaBiDiPipe   bidipipe=serverPipe.accept();
    accept()方法在獲得發(fā)送方連接之前都處于阻塞狀態(tài)。
    (2)用戶需要發(fā)送消息時(shí),主動(dòng)獲得發(fā)送管道:
    JxtaBiDiPipi bidipipe=
    new JxtaBiDiPipe(peergroup,pipeAdv,20000,this,true);
    (3)上述(1)中的對(duì)象監(jiān)聽到(2)中對(duì)象的連接請(qǐng)求,獲得接收管道,此時(shí)雙方可以互相通信。
    (4)收到的消息放到接收隊(duì)列里,根據(jù)用戶的輸入及消息的內(nèi)容把消息顯示在UI或觸發(fā)其他期望的動(dòng)作。聊天界面如圖3所示。

 

 

    與單向管道(InputPipe、OutputPipe)的異步不可靠傳輸(類似于UDP)對(duì)應(yīng),雙向同步管道提供了安全、可靠的傳輸機(jī)制,適用于傳輸文字、圖片等小批量內(nèi)容。
2.4 文件共享
    文件共享用來獲得節(jié)點(diǎn)共享的文件。與聊天模塊不同的是,對(duì)等體需先得到資源列表,確定所需要的資源后再建立與目標(biāo)對(duì)等體的連接。文件傳輸及其資源獲取通過p2psocket開發(fā)包實(shí)現(xiàn)[5]。文件傳輸過程如下:
    (1)對(duì)等體A向?qū)Φ润wB和集合點(diǎn)發(fā)送資源列表請(qǐng)求。請(qǐng)求信息用BaseMessage類或其子類實(shí)現(xiàn)。
    (2)集合點(diǎn)與對(duì)等體B均有用pipeMsgEvent實(shí)現(xiàn)的接口PipeMsgListener,每當(dāng)有消息傳送到輸入管道時(shí),事件被捕獲。若捕獲到的消息是共享列表請(qǐng)求,則集合點(diǎn)與對(duì)等體B通過doFileListRequest( )函數(shù)向A發(fā)送一個(gè)包含文件共享列表的消息。
    (3)對(duì)等體A通過自己的pipeMsgEvent接收到文件列表,并顯示。用戶選中感興趣的文件并向?qū)Φ润wB發(fā)送文件下載請(qǐng)求。如圖4所示。

    (4)對(duì)等體捕獲下載共享文件的請(qǐng)求后,先分析出對(duì)方請(qǐng)求的文件名,隨后利用doFileDownloadRequest( )函數(shù)將指定文件流打包成BaseMessage,并發(fā)送給對(duì)方。
    (5)對(duì)等體A捕獲包含下載文件流的消息后,先分析出下載文件的名字,然后存儲(chǔ)到文件中。
    (6)對(duì)等體B與A握手后,調(diào)用fileTransfer( )函數(shù),以流的形式將文件傳輸給A,A也以流的形式接收文件,并通過File類及緩沖流把緩沖區(qū)的文件轉(zhuǎn)換成磁盤中的文件。
    本文研究并設(shè)計(jì)實(shí)現(xiàn)了以JXTA協(xié)議為基礎(chǔ),以WiFi為通信媒質(zhì),以Android OS為運(yùn)行平臺(tái)的無線D2D通信系統(tǒng)。該系統(tǒng)能以現(xiàn)有的數(shù)臺(tái)近距離的智能手機(jī)為基礎(chǔ),建立起一個(gè)無線D2D 網(wǎng)絡(luò),使得這些用戶之間能夠方便地進(jìn)行通信與資源共享,這將成為諸多用戶豐富自身手機(jī)資源的有效途徑。
參考文獻(xiàn)
[1] BROOKSHIER D著.Java P2P程序設(shè)計(jì)[M].常曉波,李靜,譯.北京:中國電力出版社,2002.
[2] OAKS S,TRAVERSAT B,Li Gong,著.JXTA技術(shù)手冊(cè)[M]. 技橋,譯.北京:清華大學(xué)出版社,2004.
[3] 張利國,代聞,龔海平.Android移動(dòng)開發(fā)案例詳解[M]. 北京:人民郵電出版社,2010.
[4] 余志龍,陳昱勛,鄭名杰,等編著.Google Android SDK開發(fā)案例大全(第2版)[M].北京:人民郵電出版社,2011.
[5] 許斌.JXTA-Java P2P網(wǎng)絡(luò)編程技術(shù)[M].北京:清華大學(xué)出版社,2003.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。