




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、福建電腦2006年第7期0.引言近幾年來,P2P 文件共享軟件如eMule 、OPENEXT 、Thun-der 、Kuro M3、APIA 、iMesh 、BearShare 等深受廣大網(wǎng)民的青睞,特別是青少年。這些軟件之所以能贏得大家的喜愛,其主要原因就是下載速度快,它們可以讓大家在最短的時(shí)間內(nèi)獲得自己想要的音樂、影視劇、文件等,同時(shí)還可以分享給他人。本文將介紹一種基于JXTA 技術(shù)的P2P 文件共享軟件的設(shè)計(jì)與實(shí)現(xiàn)。1.P2P 與JXTA 1.1P2PP2P 即Peer to Peer,稱為對(duì)等連接或?qū)Φ染W(wǎng)絡(luò)。它打破了傳統(tǒng)的Client/Server (C/S或B (Browser /S
2、 (Server 模式,在網(wǎng)絡(luò)中的每個(gè)結(jié)點(diǎn)的地位都是對(duì)等的。每個(gè)結(jié)點(diǎn)既是客戶機(jī),也是服務(wù)器。P2P 具有非中心化、可擴(kuò)展性、健壯性、高性能/價(jià)格比、隱私保護(hù)、負(fù)載均衡等優(yōu)點(diǎn),并被廣泛地運(yùn)用到ICQ 類的即時(shí)通信軟件、Farsite (Microsoft /Ocean Store 類數(shù)據(jù)存儲(chǔ)軟件、Napster 類數(shù)據(jù)共享軟件、Infrasearch 、Pointera 類數(shù)據(jù)搜索及查詢軟件、Netbatch (Intel 類協(xié)同計(jì)算軟件、Groove 類數(shù)據(jù)或行動(dòng)協(xié)同軟件、游戲軟件等領(lǐng)域的開發(fā)與研究。1.2JXTAJXTA 是Sun 公司推出的一個(gè)網(wǎng)絡(luò)編程和計(jì)算平臺(tái),用以解決現(xiàn)代分布計(jì)算尤其是
3、P2P 計(jì)算中出現(xiàn)的問題。目前JXTA 首先推出了基于Java 的參考實(shí)現(xiàn),提供了支持六個(gè)協(xié)議的Java API ,JXTA 還將推出包括C 語言在內(nèi)的其它編程語言的API 。JXTA 由核心層、服務(wù)層和應(yīng)用層組成,所提供的六個(gè)協(xié)議是JXTA 核心層的重要組成部分。JXTA 通過這六個(gè)協(xié)議來支持各類P2P 應(yīng)用的開發(fā)。JXTA 采用了開放源碼的方式,由JXTA 社區(qū) 推動(dòng)發(fā)展,已經(jīng)吸引了大量業(yè)界人士參與到P2P 和JXTA 技術(shù)的研究與應(yīng)用當(dāng)中。2.系統(tǒng)功能設(shè)計(jì)P2P 文件共享系統(tǒng)從功能上分為如下四個(gè)部分。(1設(shè)置共享內(nèi)容:將本地客戶機(jī)的文件或文件夾共享給網(wǎng)
4、絡(luò)中的其它客戶。(2取消共享內(nèi)容: 取消本地客戶機(jī)的共享內(nèi)容。(3搜索:輸入所要文件的文件名在網(wǎng)絡(luò)中進(jìn)行查找,并將查找結(jié)果其顯示到文件列表中,供下載。(4下載:從文件列表中選擇所需要的文件,將其下載到本地客戶機(jī)。其系統(tǒng)結(jié)構(gòu)圖如1所示。3.系統(tǒng)開發(fā)工具與實(shí)現(xiàn)環(huán)境配置在使用JXTA 進(jìn)行編程前,首先要先下載并安裝一個(gè)JXTA 的參考實(shí)現(xiàn)。登錄網(wǎng)頁/builde/release ,下載2003年3月發(fā)布的穩(wěn)定版。該版本包含三個(gè)壓縮文件:jxta2.0_bin.zip 、jxta2.0_doc.zip 、jxta2.0_src.zip ,它們包含了JXTA
5、 編程所需的主要類庫、文檔說明和部分源代碼。本系統(tǒng)在JBuilder9.0中進(jìn)行開發(fā),需要在工程中導(dǎo)入JXTA 的相關(guān)包,這些包位于jxta2.0_bin.zip 中目錄instantp2plib 下。第一次運(yùn)行JXTA 程序時(shí),JXTA 的自動(dòng)配置工具會(huì)即時(shí)顯示出來要求對(duì)JXTA 運(yùn)行環(huán)境進(jìn)行配置,主要用來配置JXTA 的網(wǎng)絡(luò)環(huán)境。包括peer 的信息、TCP/IP 和HTTP 的配置、Rendezvous 和Relay peer 以及安全信息,根據(jù)向?qū)е改霞纯蛇M(jìn)行配置。以后每次運(yùn)行JXTA 程序都需要輸入配置時(shí)設(shè)定的用戶名和密碼。4.系統(tǒng)功能實(shí)現(xiàn)本系統(tǒng)主要使用JXTA 中的CMS (Con
6、tent Manager Service 來實(shí)現(xiàn)。CMS 是一個(gè)在點(diǎn)組中的多個(gè)點(diǎn)之間共享內(nèi)容的服務(wù),它使得Peer 可以共享自己的內(nèi)容以及定位和獲取其它Peer 上的內(nèi)容,它不僅為本地Peer 管理被共享的內(nèi)容,也能瀏覽和下載遠(yuǎn)程Peer 的內(nèi)容。CMS 主要通過下面三個(gè)類完成文件共享、取消文件共享、搜索文件和下載文件功能。!ContentManager 類:共享文件或取消文件共享。!ListContentRequest 類:發(fā)送文件搜索請(qǐng)求。!GetContentRequest 類:文件下載。4.1系統(tǒng)用戶界面設(shè)計(jì)在JBuilder9中創(chuàng)建工程file_share.jpx,并為其配置JXTA
7、 開發(fā)平臺(tái),即將jxta2.0_bin.zip 中目錄instantp2plib 下的類庫全部添加進(jìn)來。然后在工程中創(chuàng)建應(yīng)用程序SimpleFileShare.java ,并使用swing 進(jìn)行界面布局和設(shè)計(jì)。設(shè)計(jì)四個(gè)JButton 用來啟動(dòng)搜索、下載、設(shè)置共享、取消共享功能,兩個(gè)Jlist 對(duì)象jList1和jList2分別用來顯示搜索文件列表和共享文件列表,一個(gè)文本框?qū)ο骿TextFiled ,用來輸入搜索字符串。4.2系統(tǒng)初始化4.2.1導(dǎo)入JXTA 平臺(tái)基本類import net.jxta.exception.*;import net.jxta.peergroup.*;import n
8、et.jxta.share.client.*;import net.jxta.share.*;import net.jxta.share.metadata.*;4.2.2定義類成員變量private PeerGroup netPeerGroup=null;/全局peer 組private CMS cms=null;/內(nèi)容服務(wù)對(duì)象ContentAdvertisementresults=null;/存儲(chǔ)內(nèi)容廣告數(shù)組ListContentRequest request=null;/用于搜索對(duì)象DefaultListModel result_listModel=new DefaultListModel
9、(;/搜索結(jié)果列表DefaultListModel file_listModel=new DefaultListModel(;/共享結(jié)果列表4.2.3啟動(dòng)JXTA 服務(wù)定義成員方法startJXTA(來啟動(dòng)JXAT 服務(wù)。此處產(chǎn)生一個(gè)基于JXTA 的P2P 文件共享軟件的設(shè)計(jì)與實(shí)現(xiàn)楊淑萍,聶哲(深圳職業(yè)技術(shù)學(xué)院軟件工程系廣東深圳518055【摘要】:P2P 網(wǎng)絡(luò)模型已成為現(xiàn)在的技術(shù)熱點(diǎn),JXTA 是sun 公司推出的P2P 應(yīng)用解決平臺(tái)。本文所實(shí)現(xiàn)基于JXTA 的P2P 文件共享軟件,具備了一個(gè)P2P 文件共享軟件的基本功能,在它基礎(chǔ)上可以開發(fā)成為一個(gè)較復(fù)雜的P2P 應(yīng)用,為P2P 應(yīng)用的實(shí)現(xiàn)
10、提供了基礎(chǔ)。【關(guān)鍵詞】:P2P ;JXTA ;文件共享;搜索;下載圖1文件共享軟件系統(tǒng)結(jié)構(gòu)圖105福建電腦2006年第7期CMS,并設(shè)置監(jiān)聽器。public void startJXTA(try/創(chuàng)建并啟動(dòng)默認(rèn)的JXTA網(wǎng)絡(luò)點(diǎn)組netPeerGroup=PeerGroupFactory.newNetPeerGroup(;cms=new CMS(;/創(chuàng)建一個(gè)內(nèi)容管理服務(wù)對(duì)象cms.init(netPeerGroup,null,null;/在指定的Peer組內(nèi)初始化CMS 服務(wù)cms.addSearchListener(new MySearchListener(;/設(shè)置監(jiān)聽器String home
11、dir=System.getProperty("JXTA_HOME"/創(chuàng)建共享目錄homedir=(homedir!=null?homedir+"ShareDemo":"ShareDemo"if(cms.startApp(new File(homedir=-1System.out.print("CMS initalization faild"System.exit(-1;catch(PeerGroupException e其中netPeerGroup創(chuàng)建并啟動(dòng)默認(rèn)的JXTA NetPeerGroup, cms創(chuàng)建的
12、一個(gè)內(nèi)容管理服務(wù)對(duì)象,cms.startApp(啟動(dòng)CMS服務(wù),接受并處理到達(dá)的共享內(nèi)容請(qǐng)求,并提供一個(gè)目錄用于存儲(chǔ)和緩存內(nèi)容廣告。4.3搜索的實(shí)現(xiàn)搜索功能的實(shí)現(xiàn)要考慮兩個(gè)方面,一方面提供本地資源為其它peer搜索,通過搜索監(jiān)聽器類MySearchListener實(shí)現(xiàn)。另一方面要發(fā)出搜索請(qǐng)求并對(duì)搜索到的結(jié)果進(jìn)行處理,這里通過搜索請(qǐng)求類MyListRequest和搜索按鈕的事件處理程序來實(shí)現(xiàn),搜索字符串通過一個(gè)文本框?qū)ο髞慝@取。4.3.1搜索監(jiān)聽器類MySearchListenerMySearchListener類用來監(jiān)聽其它peer對(duì)本機(jī)資源的搜索,是一個(gè)內(nèi)部類。它實(shí)現(xiàn)了接口SearchLis
13、tener,即實(shí)現(xiàn)接口中的方法queryReceived(String queryString方法。當(dāng)某個(gè)peer發(fā)出的搜索請(qǐng)求到達(dá)本機(jī)時(shí),會(huì)激發(fā)queryReceived(String queryString方法去搜索本機(jī)的資源。4.3.2搜索請(qǐng)求類MyListRequestMyListRequest類也是一個(gè)內(nèi)部類,它繼承ListContentRequest類,并重寫類中的notifyMoreRequest(方法,使用時(shí)由該類對(duì)象發(fā)出請(qǐng)求,構(gòu)造器帶入組名和搜索字符串。當(dāng)搜索結(jié)果到達(dá)時(shí),類中的notifyMoreRequest(方法被自動(dòng)調(diào)用,并將結(jié)果顯示在列表jList1的result_l
14、istModel中。類MyListRequest的代碼如下:class MyListRequest extends ListContentRequestSimpleFileShare searchWindow=null;public MyListRequest(PeerGroup group,String inSubStr,SimpleFileShare searchWindowsuper(group,inSubStr;this.searchWindow=searchWindow;public void notifyMoreResults(if(searchWindow!=nullsearch
15、Window.updateResults(this.getResults(;getResults(是MyListRequest父類ListContentRequest類中的方法,用來獲取ContentAdvertisement形式的搜索結(jié)果。方法updateResults(ContentAdvertisementresults用來處理搜索結(jié)果并將其顯示到一個(gè)jList對(duì)象的result_listModel中。4.3.3搜索從文本框?qū)ο螳@取搜索字符串searchString,創(chuàng)建一個(gè)包含搜索字符串的ListContentRequest對(duì)象request,然后調(diào)用ListContentReques
16、t的方法activateRequest(向netPeerGroup點(diǎn)組發(fā)出搜索請(qǐng)求并等待結(jié)果。request=new MyListRequest(netPeerGroup,searchString,this; /創(chuàng)建對(duì)象request.activateRequest(;/發(fā)出搜索請(qǐng)求并等待結(jié)果4.4下載的實(shí)現(xiàn)從搜索到的文件列表中選擇一個(gè)文件將其下載到本地機(jī)上。通過文件下載類DownloadFile和下載按鈕的事件處理程序來實(shí)現(xiàn)。4.4.1文件下載類DownloadFile該類繼承GetContentRequest類,并實(shí)現(xiàn)接口ActionListener。其主要功能是下載文件,另外該類需要重寫
17、父類中的方法notifyDone(、notifyFailure(、notifyUpdate(int percentage,它們分別用來處理下載完成、下載失敗和部分下載三種情況。DownloadFile類構(gòu)造器的主要代碼如下:public DownloadFile(JFrame parent,ContentAdvertisement source,File destinationsuper(netPeerGroup,source,destination;dlg=new Dialog(parent,"Downloading"+destination.getAbsoluteFil
18、e(.getName(;4.4.2下載下載按鈕的事件處理程序生成一個(gè)DownloadFile對(duì)象,將選擇的文件下載到指定的位置。被下載文件的信息和存放位置由DownloadFile的構(gòu)造器帶入。關(guān)鍵語句如下:new DownloadFile(this,resultsselectedIndex,savePath;其中resultsselectedIndex為選擇要下載的文件,savePath為本地Peer保存所下載文件的位置。4.5設(shè)置共享與取消共享的實(shí)現(xiàn)將本機(jī)的文件共享給其它的peer或取消共享,通過CMS的ContentManager類的share(和unshare(方法來實(shí)現(xiàn)。下面語句將實(shí)現(xiàn)文件file共享,其中file是共享文件的File 對(duì)象。cms.getContentManager(.share(file;從共享文件列表中選擇要取消共享的文件,通過下面語句將其共享取消。int index=jList2.getSelectedIndex(;cms.getContentManager(.unshare(cms.getContentManager(. getContent(index;其中index是文件在列表中的索引號(hào)。5.結(jié)束
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 修理廠和供貨商合同范本
- 公寓開荒保潔合同范本
- 加裝電梯加盟合同范本
- canying勞動(dòng)合同范本
- 剝離工程合同范本
- 保理 保證合同范本
- 養(yǎng)鵝訂單合同范本
- 中介居間服務(wù)合同范本
- 催收咨詢服務(wù)合同范例
- 加工制作維修合同范例
- 氧化還原反應(yīng)配平專項(xiàng)訓(xùn)練
- 2024年江蘇省中等職業(yè)學(xué)校學(xué)生學(xué)業(yè)水平考試機(jī)械CAD繪圖試卷(含5張圖)
- 2024年7天雙方無責(zé)任試崗期協(xié)議書模板
- 期末測試模擬卷(試題)-2023-2024學(xué)年五年級(jí)下冊(cè)數(shù)學(xué)人教版
- 全國教育科學(xué)規(guī)劃課題申報(bào)書:02.《鑄牢中華民族共同體意識(shí)的學(xué)校教育研究》
- 《船舶精通急救》全套教學(xué)課件
- 用藥安全課件教學(xué)課件
- 2024智能家居行業(yè)創(chuàng)新發(fā)展與前景展望研究報(bào)告
- (人教PEP2024版)英語一年級(jí)上冊(cè)Unit 5 教學(xué)課件(新教材)
- 腰椎術(shù)后失敗綜合征
評(píng)論
0/150
提交評(píng)論