版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、福建電腦2006年第7期0.引言近幾年來,P2P 文件共享軟件如eMule 、OPENEXT 、Thun-der 、Kuro M3、APIA 、iMesh 、BearShare 等深受廣大網(wǎng)民的青睞,特別是青少年。這些軟件之所以能贏得大家的喜愛,其主要原因就是下載速度快,它們可以讓大家在最短的時間內(nèi)獲得自己想要的音樂、影視劇、文件等,同時還可以分享給他人。本文將介紹一種基于JXTA 技術(shù)的P2P 文件共享軟件的設(shè)計與實現(xiàn)。1.P2P 與JXTA 1.1P2PP2P 即Peer to Peer,稱為對等連接或?qū)Φ染W(wǎng)絡(luò)。它打破了傳統(tǒng)的Client/Server (C/S或B (Browser /S
2、 (Server 模式,在網(wǎng)絡(luò)中的每個結(jié)點的地位都是對等的。每個結(jié)點既是客戶機,也是服務(wù)器。P2P 具有非中心化、可擴展性、健壯性、高性能/價格比、隱私保護、負載均衡等優(yōu)點,并被廣泛地運用到ICQ 類的即時通信軟件、Farsite (Microsoft /Ocean Store 類數(shù)據(jù)存儲軟件、Napster 類數(shù)據(jù)共享軟件、Infrasearch 、Pointera 類數(shù)據(jù)搜索及查詢軟件、Netbatch (Intel 類協(xié)同計算軟件、Groove 類數(shù)據(jù)或行動協(xié)同軟件、游戲軟件等領(lǐng)域的開發(fā)與研究。1.2JXTAJXTA 是Sun 公司推出的一個網(wǎng)絡(luò)編程和計算平臺,用以解決現(xiàn)代分布計算尤其是
3、P2P 計算中出現(xiàn)的問題。目前JXTA 首先推出了基于Java 的參考實現(xiàn),提供了支持六個協(xié)議的Java API ,JXTA 還將推出包括C 語言在內(nèi)的其它編程語言的API 。JXTA 由核心層、服務(wù)層和應(yīng)用層組成,所提供的六個協(xié)議是JXTA 核心層的重要組成部分。JXTA 通過這六個協(xié)議來支持各類P2P 應(yīng)用的開發(fā)。JXTA 采用了開放源碼的方式,由JXTA 社區(qū) 推動發(fā)展,已經(jīng)吸引了大量業(yè)界人士參與到P2P 和JXTA 技術(shù)的研究與應(yīng)用當中。2.系統(tǒng)功能設(shè)計P2P 文件共享系統(tǒng)從功能上分為如下四個部分。(1設(shè)置共享內(nèi)容:將本地客戶機的文件或文件夾共享給網(wǎng)
4、絡(luò)中的其它客戶。(2取消共享內(nèi)容: 取消本地客戶機的共享內(nèi)容。(3搜索:輸入所要文件的文件名在網(wǎng)絡(luò)中進行查找,并將查找結(jié)果其顯示到文件列表中,供下載。(4下載:從文件列表中選擇所需要的文件,將其下載到本地客戶機。其系統(tǒng)結(jié)構(gòu)圖如1所示。3.系統(tǒng)開發(fā)工具與實現(xiàn)環(huán)境配置在使用JXTA 進行編程前,首先要先下載并安裝一個JXTA 的參考實現(xiàn)。登錄網(wǎng)頁/builde/release ,下載2003年3月發(fā)布的穩(wěn)定版。該版本包含三個壓縮文件:jxta2.0_bin.zip 、jxta2.0_doc.zip 、jxta2.0_src.zip ,它們包含了JXTA
5、 編程所需的主要類庫、文檔說明和部分源代碼。本系統(tǒng)在JBuilder9.0中進行開發(fā),需要在工程中導入JXTA 的相關(guān)包,這些包位于jxta2.0_bin.zip 中目錄instantp2plib 下。第一次運行JXTA 程序時,JXTA 的自動配置工具會即時顯示出來要求對JXTA 運行環(huán)境進行配置,主要用來配置JXTA 的網(wǎng)絡(luò)環(huán)境。包括peer 的信息、TCP/IP 和HTTP 的配置、Rendezvous 和Relay peer 以及安全信息,根據(jù)向?qū)е改霞纯蛇M行配置。以后每次運行JXTA 程序都需要輸入配置時設(shè)定的用戶名和密碼。4.系統(tǒng)功能實現(xiàn)本系統(tǒng)主要使用JXTA 中的CMS (Con
6、tent Manager Service 來實現(xiàn)。CMS 是一個在點組中的多個點之間共享內(nèi)容的服務(wù),它使得Peer 可以共享自己的內(nèi)容以及定位和獲取其它Peer 上的內(nèi)容,它不僅為本地Peer 管理被共享的內(nèi)容,也能瀏覽和下載遠程Peer 的內(nèi)容。CMS 主要通過下面三個類完成文件共享、取消文件共享、搜索文件和下載文件功能。!ContentManager 類:共享文件或取消文件共享。!ListContentRequest 類:發(fā)送文件搜索請求。!GetContentRequest 類:文件下載。4.1系統(tǒng)用戶界面設(shè)計在JBuilder9中創(chuàng)建工程file_share.jpx,并為其配置JXTA
7、 開發(fā)平臺,即將jxta2.0_bin.zip 中目錄instantp2plib 下的類庫全部添加進來。然后在工程中創(chuàng)建應(yīng)用程序SimpleFileShare.java ,并使用swing 進行界面布局和設(shè)計。設(shè)計四個JButton 用來啟動搜索、下載、設(shè)置共享、取消共享功能,兩個Jlist 對象jList1和jList2分別用來顯示搜索文件列表和共享文件列表,一個文本框?qū)ο骿TextFiled ,用來輸入搜索字符串。4.2系統(tǒng)初始化4.2.1導入JXTA 平臺基本類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ù)對象ContentAdvertisementresults=null;/存儲內(nèi)容廣告數(shù)組ListContentRequest request=null;/用于搜索對象DefaultListModel result_listModel=new DefaultListModel
9、(;/搜索結(jié)果列表DefaultListModel file_listModel=new DefaultListModel(;/共享結(jié)果列表4.2.3啟動JXTA 服務(wù)定義成員方法startJXTA(來啟動JXAT 服務(wù)。此處產(chǎn)生一個基于JXTA 的P2P 文件共享軟件的設(shè)計與實現(xiàn)楊淑萍,聶哲(深圳職業(yè)技術(shù)學院軟件工程系廣東深圳518055【摘要】:P2P 網(wǎng)絡(luò)模型已成為現(xiàn)在的技術(shù)熱點,JXTA 是sun 公司推出的P2P 應(yīng)用解決平臺。本文所實現(xiàn)基于JXTA 的P2P 文件共享軟件,具備了一個P2P 文件共享軟件的基本功能,在它基礎(chǔ)上可以開發(fā)成為一個較復雜的P2P 應(yīng)用,為P2P 應(yīng)用的實現(xiàn)
10、提供了基礎(chǔ)?!娟P(guān)鍵詞】:P2P ;JXTA ;文件共享;搜索;下載圖1文件共享軟件系統(tǒng)結(jié)構(gòu)圖105福建電腦2006年第7期CMS,并設(shè)置監(jiān)聽器。public void startJXTA(try/創(chuàng)建并啟動默認的JXTA網(wǎng)絡(luò)點組netPeerGroup=PeerGroupFactory.newNetPeerGroup(;cms=new CMS(;/創(chuàng)建一個內(nèi)容管理服務(wù)對象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)建并啟動默認的JXTA NetPeerGroup, cms創(chuàng)建的
12、一個內(nèi)容管理服務(wù)對象,cms.startApp(啟動CMS服務(wù),接受并處理到達的共享內(nèi)容請求,并提供一個目錄用于存儲和緩存內(nèi)容廣告。4.3搜索的實現(xiàn)搜索功能的實現(xiàn)要考慮兩個方面,一方面提供本地資源為其它peer搜索,通過搜索監(jiān)聽器類MySearchListener實現(xiàn)。另一方面要發(fā)出搜索請求并對搜索到的結(jié)果進行處理,這里通過搜索請求類MyListRequest和搜索按鈕的事件處理程序來實現(xiàn),搜索字符串通過一個文本框?qū)ο髞慝@取。4.3.1搜索監(jiān)聽器類MySearchListenerMySearchListener類用來監(jiān)聽其它peer對本機資源的搜索,是一個內(nèi)部類。它實現(xiàn)了接口SearchLis
13、tener,即實現(xiàn)接口中的方法queryReceived(String queryString方法。當某個peer發(fā)出的搜索請求到達本機時,會激發(fā)queryReceived(String queryString方法去搜索本機的資源。4.3.2搜索請求類MyListRequestMyListRequest類也是一個內(nèi)部類,它繼承ListContentRequest類,并重寫類中的notifyMoreRequest(方法,使用時由該類對象發(fā)出請求,構(gòu)造器帶入組名和搜索字符串。當搜索結(jié)果到達時,類中的notifyMoreRequest(方法被自動調(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é)果并將其顯示到一個jList對象的result_listModel中。4.3.3搜索從文本框?qū)ο螳@取搜索字符串searchString,創(chuàng)建一個包含搜索字符串的ListContentRequest對象request,然后調(diào)用ListContentReques
16、t的方法activateRequest(向netPeerGroup點組發(fā)出搜索請求并等待結(jié)果。request=new MyListRequest(netPeerGroup,searchString,this; /創(chuàng)建對象request.activateRequest(;/發(fā)出搜索請求并等待結(jié)果4.4下載的實現(xiàn)從搜索到的文件列表中選擇一個文件將其下載到本地機上。通過文件下載類DownloadFile和下載按鈕的事件處理程序來實現(xiàn)。4.4.1文件下載類DownloadFile該類繼承GetContentRequest類,并實現(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下載下載按鈕的事件處理程序生成一個DownloadFile對象,將選擇的文件下載到指定的位置。被下載文件的信息和存放位置由DownloadFile的構(gòu)造器帶入。關(guān)鍵語句如下:new DownloadFile(this,resultsselectedIndex,savePath;其中resultsselectedIndex為選擇要下載的文件,savePath為本地Peer保存所下載文件的位置。4.5設(shè)置共享與取消共享的實現(xiàn)將本機的文件共享給其它的peer或取消共享,通過CMS的ContentManager類的share(和unshare(方法來實現(xiàn)。下面語句將實現(xiàn)文件file共享,其中file是共享文件的File 對象。cms.getContentManager(.share(file;從共享文件列表中選擇要取消共享的文件,通過下面語句將其共享取消。int index=jList2.getSelectedIndex(;cms.getContentManager(.unshare(cms.getContentManager(. getContent(index;其中index是文件在列表中的索引號。5.結(jié)束
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 服裝行業(yè)面料設(shè)計師培訓心得
- 急診搶救科護士的工作總結(jié)
- 造紙行業(yè)工程師工作總結(jié)
- 農(nóng)業(yè)行業(yè)銷售工作總結(jié)
- 紡織服裝行業(yè)營業(yè)員工作總結(jié)
- 科研行業(yè)前臺工作總結(jié)
- 服裝行業(yè)人才招聘實例總結(jié)
- 藝術(shù)行業(yè)行政后勤工作總結(jié)
- 《管教兒女的智慧》課件
- 《心力衰竭護理》課件
- 《客房服務(wù)與管理》課程標準課程內(nèi)容與要求
- GB 26920-2024商用制冷器具能效限定值及能效等級
- 備用電源使用安全管理制度
- 試卷(完整版)python考試復習題庫復習知識點試卷試題
- 能源中國學習通超星期末考試答案章節(jié)答案2024年
- 魚塘租賃合同模板8篇
- 中學美育(藝術(shù)教育)工作發(fā)展年度報告
- 生活垃圾焚燒發(fā)電項目特許經(jīng)營權(quán)采購投標方案
- 2024至2030年中國港口機械設(shè)備行業(yè)發(fā)展現(xiàn)狀調(diào)研與競爭格局報告
- 車輛駕駛業(yè)務(wù)外包服務(wù)方案
- 監(jiān)理工作重點、難點分析及解決方案
評論
0/150
提交評論