天天看點

JXTA P2P網絡程式設計技術

1.前言

最近,P2P(Peer-to-Peer)又成為了網際網路上的一個熱 點。P2P是網際網路的一種應用模式,其意思是指網絡上的任何裝置(包括大型機、PC機、PDA、手機、機頂盒等等)都可以平等地直接進行連接配接并進行協作。 想比目前網際網路上主流的應用模式Client/Server或者Client/Service而言,P2P具有自己鮮明的特點和優勢。(這也是我對它着迷 的地方。

有了P2P技術,網際網路不需要一個大型的伺服器,這對于有些行業(尤其是網絡遊戲)來說,是非常“幸運”的!因為P2P技術都很友善的實作你隻化很少的money就可以達到你想要的效果。(是不是心動了?呵呵……J)

一些常見的P2P應用程式:聊天程式,遊戲(尤其網絡遊戲),檔案共享,協同工作和白闆。

當然,P2P網絡也應具備的下列特點:

① 互操作性:P2P系統很容易的找到并連接配接對方,彼此進行交流。

② 平台無關性:P2P系統應該設計成獨立于程式設計語言如C,Java等,獨立于系統平台如Windows和UNIX,獨立于網絡平台如TCP/IP和BLUETOOTH。

③ 廣泛性:P2P系統可以運作在任何有數字處理功能的裝置上。

2.JXTA是什麼

首先,JXTA是為了建構P2P網絡而制訂的一組協定,是解決建構P2P網絡必須要解決的問題的方法。共有六個協定(關于這些協定後面會詳細的談的)。

其次,JXTA是P2P應用程式開發的運作平台。目前,JXTA首先推出了基于Java的參考實作的。

它三層組成:如圖1-1所示:

第一層是JXTA核心層,它包含了服務所必需要的核心功能,包括Peer、對等組、Peer 發現、Peer通信、Peer監視和相關的安全原語;第二層是服務層,它提供了通路JXTA協定的接口,包括對于P2P網絡不是必需的,但很通用的功能, 如查找、共享、索引、代碼緩存和内容緩存的機制;第三層是應用層,它使用服務來通路JXTA網絡和JXTA提供的功能,包括了應用JXTA服務開發出來得 完整的P2P應用程式,如myJXTA,JXTA-CAD等應用程式。

JXTA P2P網絡程式設計技術

下面簡略的介紹一下JXTA的一些概念吧:

3.JXTA的一些概念

Peer(對等機):一個虛拟的通信點。一個使用者可以有多個Peer,一台計算機或裝置上同樣可以有多個Peer。

Peer Group(對等組):一種組織Peer并且釋出組内的特定服務的方式。可被建立、加入、退出;在一個組裡可以更新一個組成員的關系。

(管道):Peer之間的虛拟通道,可以透過防火牆的障礙進行通信。進而使得Peer在大多數網絡情況下都可以通信。

Advertisement(廣告):一個XML文檔,用來描述JXTA的消息、Peer、對等組或者服務等。它必須遵守編碼、标簽和内容的标準,用來交換JXTA網絡上可以獲得的任何資訊。大多數JXTA的廣告編碼是使用UTF-8。

(消息):有兩種方式來處理消息:①使用XML格式;②使用二進制格式。

(集合點):一個能夠處理來自其他Peer請求的Peer。也可以将請求委托給其他集合點

(路由Peer):一個支援Peer端點協定的Peer。

(網關Peer):一個作為通信中繼的Peer。與Rendezvous Peer不同的是,它是用來在Peer間傳遞消息,而Rendezvous Peer是用來傳遞請求的。

好了說了這麼多的東西,連我都有點暈了。J 呵呵……下面開始做一個例子來熟悉一下吧:

4.下載下傳并安裝JXTA

軟體位址: http://www.jxta.org , 請下載下傳最新穩定版本。我下載下傳的是2003-12-15更新的穩定版。它提供了幾種平台,根據你的作業系統選擇你需要的JXTA。當然你也可以把它的源代碼 都可以下載下傳下來,幫助你了解JXTA是如何工作的,不過要想編譯這些代碼,你還得使用Apache Ant工具,可以在 http://www.apache.org 下載下傳。還有一個要注意的是你還得安裝JDK1.3.1或更高的版本,推薦JDK1.4版本。

下面講一下配置:

第一次運作JXTA程式時,JXTA将自動顯示配置工具。在Basic settings頁面裡,填上一個你認為很酷的名字,表示你的Peer Name。點選OK。下一個界面輸入安全使用者名(Secure Username)和密碼(Password),然後在Experienced Users Only頁面裡填上你的IP位址和端口,TCP預設端口為9701,HTTP預設端口為9700,并點選“+”按鈕。複選框的意思也就一目了然了。當然你 也可以點選Download relay and rendezvous lists按鈕來下載下傳一些可供使用的TCP和HTTP rendezvous清單,以及網關清單。

如果你有防火牆一定要選擇Use a relay(Required if behind firewall/NAT) 複選框。

恭喜,你現在就可以感受和體驗JXTA程式了。

5.Hello JXTA的簡單程式

程式源代碼:

java 代碼  

  1. // HelloJXTA.java   
  2. import  java.io.InputStream;  
  3. import  net.jxta.peergroup.PeerGroup;  
  4. import  net.jxta.peergroup.PeerGroupFactory;  
  5. import  net.jxta.exception.PeerGroupException;  
  6. public   class  HelloJXTA  
  7. {  
  8.     public   static   void  main(String args[])  
  9.     {  
  10.       System.out.println("Starting JXTA...." );  
  11.       HelloJXTA myapp = new  HelloJXTA();  
  12.       myapp.startJXTA();  
  13.       System.exit(0 );  
  14.     }  
  15.     public   void  startJXTA()  
  16.     {  
  17.         PeerGroup pg = null ;  
  18.         try   
  19.         {  
  20.             pg = PeerGroupFactory.newNetPeerGroup();  
  21.         }  
  22.         catch  (PeerGroupException e)  
  23.         {  
  24.             System.out.println("Fatal error:group creation failure" );  
  25.             e.printStackTrace();  
  26.             System.exit(1 );  
  27.         }  
  28.         System.out.println("Hello JXTA!:)" );  
  29.         System.out.println("Group name = "  + pg.getPeerGroupName());  
  30.         System.out.println("Group ID = "  + pg.getPeerGroupID().toString());  
  31.         System.out.println("Peer name = "  + pg.getPeerName());  
  32.         System.out.println("Peer ID = "  + pg.getPeerID().toString());  
  33.         System.out.println("Peer BaseClass = " + pg.refTcpProtoSpecID.getBaseClass());  
  34.     }  
  35. }  

但要注意的是,此程式在編譯時,要用到jxta.jar檔案,是以我們這樣來編譯程式:

D:>javac –classpath .\lib\jxta.jar HelloJXTA.java

這還不算複雜了,運作時候就有點複雜了:

D:>java –classpath .\lib\jxta.jar; .\lib\log4j.jar; .\lib\jxtasecurity.jar; .\lib\cryptix-asn1.jar; .\lib\cryptix32.jar; .\lib\bcprov-jdk14.jar;.\lib\jxtaptls.jar;. HelloJXTA

第一次運作程式的時候,會自動出現JXTA平台的配置界面(以後隻會出現登入界面,如圖1-2所示,注意:登入的是Secure Username,而不是Peer Name),和上面的配置一樣。同時,你還可以發現目前的目錄下多了個.jxta的目錄:

l PlatformConfig檔案:由JXTA的配置工具生成,是一個符合XML規範的文本檔案。如果你删除它,下次運作HelloJXTA檔案時候會出現JXTA平台配置界面。

l Cm目錄:本地的緩沖目錄,記錄了發現的所有的PeerGroup的資訊。在本例中,應該發現jxta-NetGroup和jxta-WorldGroup兩個目錄。

l Pse目錄:存放Peer用于安全認證的證書資訊.

JXTA P2P網絡程式設計技術

運作結果,如圖 1-3 所示:

當然你可以把上面的指令寫成 .bat 檔案也是可以的,但也可以把上面的包都加入到 classpath 的環境變量中去。如果你還是覺得有點麻煩的話,那就選擇一個編譯器。比如 JCreator Pro 2.0 (我隻有 2.0 沒用 2.5 J )。 Configure — > Options — > JDK Profiles — > Edit ,在 Classes 頁面裡 Add Package 。将 lib 目錄下的 *.jar 都添加到 Classes 裡面中去。也将 jre\lib\ 目錄下 *.jar 添加進去。編譯、運作,都是 OK 的!呵呵……入門就說到這裡,下一篇将關于 JXTA 的一些應用程式。

JXTA P2P網絡程式設計技術