通過對JXTA技術近壹個月的研究,終於大致了解了JXTA技術在P2P網絡中的JAVA語言實現過程,特整理出來供大家交流探討。其實我也能找到壹些關於這個技術的概念和介紹的資料。這裏就不介紹了。我將通過代碼直接描述壹個P2P網絡在JAVA語言中的實現過程。第壹步是每個人都需要下載JXTA類庫,可以在網上下載到最新版本。很抱歉,我不能在這裏上傳JXTA版本,因為它超過了限制!我會在論壇上傳另壹份包括CHM格式的技術手冊。)第二步:新建壹個JAVA項目,將這些JAR包添加到構建路徑中(這裏使用Eclipse使用其他IDE或者直接將這些JAR包添加到類路徑中。)第三步:我們將開始編碼並創建壹個新類。它的main方法和調用方法的代碼如下。
public static void main(String[]args){?resto peer myapp = new resto peer();//在這裏實例化壹個peer對象?myapp startJxta();//在這裏啟動JXTA方法加入群組獲得服務等。系統出口();//函數退出系統?}public void startJxta() {?試試{?加入默認對等組NetPeerGroup?netpg = new NetPeerGroupFactory()get interface();?} catch(PeerGroupException e){//TODO自動生成catch block e print stack trace();} ?}
這裏需要註意的是,由於JXTA技術的不斷更新,JXTA類庫的結構和實現發生了很大的變化。在這裏加入默認的對等組是版本中的壹個新方法。JXTA技術手冊中的方法已經過時。步驟4,我們需要獲得默認對等組提供的發現服務。
?discovery service disco = netpggetDiscoveryService();
這時候我們就可以利用disco服務找到我們需要的廣告了。第五步,我們需要找到壹個屬於自己的同伴群體。如果找不到,我們就創建這樣壹個同輩群體。這個時候我們只是想得到自己需要的服務,因為每個對等組提供的服務並不都是壹樣的。我們通常通過壹個同輩群體,把有相同目的的同輩組織起來。加入對等組的代碼如下(該示例由《JXTA技術手冊》中壹家餐廳的拍賣服務案例描述)。
//加入拍賣群?private void joinRestoNet() {?int count =;//嘗試發現的最大周期數是多少?System out println(試圖發現組名為RestoNet的對等組);?從NetPeerGroup獲取發現服務?discovery service h disco = netpg getdiscovery service();?枚舉ae = null//記錄找到的廣告?//循環,直到找到RestoNet對等組,或者直到達到預期發現的嘗試次數?while(count & gt;) {?試試{?//第壹次搜索對等體的本地緩存找到RestoNet對等體組的公告//通過Net peer group提供的發現服務發現Name屬性為RestoNet的對等體組?AE = h disco getlocal advertisements(discovery service組名RestoNet);//如果發現RestoNet對等組宣布方法已經完成退出循環?如果((ae!= null)& amp;& ampAE hasmorelements()){?打破;?}//本地找不到就發遠程發現請求?//如果參數依次為,待查找的對等體ID為空,則基於此條件未找到的通知類型為對等體和ADV?//獲取待發現的公告屬性的名稱屬性值時,需要獲取的公告的最大數量。h disco get remote advertisions(null發現服務組名restanettnull);?//線程暫停以等待發現請求try {?線程睡眠(超時);?} catch(中斷異常e) {?// TODO自動生成catch塊?e printStackTrace();?}} catch (IOException e) {// TODO自動生成的catch塊?e printStackTrace();?}?}?/* ?*以上是循環尋找目標群體的過程。以下是加盟的流程?* */?//創建引用對等組播發Restonetadv = null的對等組播發;?//檢查我們是否已經找到RestoNet公告。如果我們沒有找到它,這意味著我們可能是第壹個嘗試加入該組的對等體//或者其他知道RestoNet組已關閉或不可達的對等體成員//在這種情況下,我們必須創建RestoNet對等體組?if (ae == null ||!Ae hasMoreElements()) {//不提示分組就創建分組?系統輸出println(找不到RestoNext對等組;創造我);試試{?//創建新的對等組RestoNet全能對等組?//通過NetPeerGroup獲取壹般的對等組公告?moduleimpladveditionimpladdv = netpg getallpurposeigergroupimpladvertisement();//通過JXTA網絡對等組創建新的對等組將自己發布對等組公告。//參數依次為對等組ID公告組名描述Restonet = net PG新組(MK Group ID()impla DV Restonet Inc);//獲取對等組廣告restoneadv = net pg getpeergroupadvertisement();} catch (Exception e) {// TODO自動生成的catch block e print stack trace();}} else {?//在緩存中找到RestoNet通知意味著我們可以加入這個現有的組?//從集合中提取對等組廣告元素?restone adv =(PeerGroupAdvertisement)AE next element();嘗試{//加入對等組。JXTA不會發布Restonet = net pg新組(RestonetadV)因為公告已經發布;System out println(找到RestoNet對等組並加入現有組);?} catch(PeerGroupException e){//TODO自動生成catch block e print stack trace();?}}?//獲得RestoNet提供的發現服務和管道服務?disco = restoNet getDiscoveryService();pipes = restoNet getPipeService();system out println(RestoNet Restaurant _(+brand+)上線);返回;}
此時,我們已經加入或創建了壹個RestoNet對等組,它位於NetPerrGroup組中,因此我們可以通過Net peer group提供的發現服務找到這組廣告。如果找不到,可能和網絡環境有關,因為等待時間太短或者循環次數太少,因為P2P網絡不可靠,所以這個參數很難確定,需要根據實際情況來設置。此時,我們的機器已經處於P2P網絡中。其實我們在得到默認的對等組實例的時候就已經在P2P網絡中了,但是現在我們已經通過網絡發現找到或者創建了我們需要的對等組並加入其中,然後我們就可以提供和消費對等組提供的服務或者對等組中的對等體提供的服務。以上搭建P2P網絡和加入同行群的簡單申請,以後會陸續貼出,敬請關註!以上都是個人經歷和理解。如有錯誤,請讓我批評指正。如需交流,請添加MSN源代碼下載。最近我發表了壹篇關於JXTA科技搭建P2P網絡的文章,引起了朋友們的關註和支持。現在應朋友們的要求,我上傳壹些測試源代碼,供大家參考和討論。希望大家多提寶貴意見!需要註意的是,SRCRARR中的兩個文件需要放在不同的工作目錄下才能成功運行,因為JXTA在第壹次運行時會為每個對等體設置壹個緩存目錄。如果在同壹個工作區,後者會覆蓋前者的信息。所以建議使用不同的工作區,最好是兩臺電腦來測試。第壹次運行時會彈出壹個配置窗口。只需要填寫用戶名和密碼,其他設置暫時不用擔心。密碼必須多於八個,另外三個包是JXTA類庫。請將它們解壓縮並導入到項目中
src rar lib rar src lib rar lib rar lishixinzhi/Article/program/Java/Javascript/201311/25439