摘 要:本文簡(jiǎn)要介紹了P2P網(wǎng)絡(luò)以及JAVA技術(shù),同時(shí)從程序開發(fā)、網(wǎng)絡(luò)通信等方面分析了JAVA技術(shù)在P2P環(huán)境下的實(shí)際運(yùn)用,以期拓展JAVA技術(shù)的實(shí)際運(yùn)用,從而使JAVA技術(shù)的運(yùn)用更為豐富。
關(guān)鍵詞:P2P環(huán)境;JAVA技術(shù);實(shí)際運(yùn)用
一、P2P技術(shù)介紹
P2P網(wǎng)絡(luò)全稱為“peer to peer”,部分人則認(rèn)為是“person to person”。Peer代表具有同等地位以及能力的人,如伙伴以及同事。所以,P2P便可以理解為同事對(duì)同事,即對(duì)等網(wǎng)。對(duì)等網(wǎng)絡(luò)也可稱之為對(duì)等組,網(wǎng)絡(luò)中所有計(jì)算機(jī)擁有的功能一致,沒(méi)有主從差異。每臺(tái)計(jì)算機(jī)不僅可以作為服務(wù)器,由用戶指定共享資源,從而達(dá)到資源共享的目的,同時(shí)也可以作為工作站使用。Intel對(duì)P2P的定義如下:P2P指利用系統(tǒng)之間直接相互傳輸信息完成計(jì)算機(jī)信息數(shù)據(jù)的共享網(wǎng)絡(luò)。其中,信息資源指處理器時(shí)鐘、磁盤空間以及信息交換等。
相比以服務(wù)器客戶端技術(shù)為基礎(chǔ)開發(fā)的應(yīng)用,基于P2P環(huán)境下運(yùn)行的應(yīng)用,由于其自身的非中心化,所以必然具有更為良好的拓展性,且能夠有效保護(hù)客戶隱私,提高計(jì)算機(jī)性能以及完成均勻負(fù)載。由于上述原因,P2P網(wǎng)絡(luò)技術(shù)在各方面的運(yùn)用極為廣泛,P2P網(wǎng)絡(luò)技術(shù)的不斷開發(fā)也成為熱門關(guān)注的熱點(diǎn)?;赑2P網(wǎng)絡(luò)技術(shù)開發(fā)的軟件,需要分布至每個(gè)用戶系統(tǒng)當(dāng)中進(jìn)行使用,但用戶不同,計(jì)算機(jī)所使用的系統(tǒng)之間也存在差異。所以P2P網(wǎng)絡(luò)的應(yīng)用范圍也受到一定限制。
P2P網(wǎng)絡(luò)具有以下特點(diǎn):其一,網(wǎng)絡(luò)中的計(jì)算機(jī)數(shù)量較少,通常情況下,對(duì)等網(wǎng)絡(luò)的計(jì)算機(jī)數(shù)量不超過(guò)10臺(tái)。其二,利用最為直接的交換方式以達(dá)到資源以及服務(wù)共享的目的,各個(gè)節(jié)點(diǎn)擁有相同地位,在作為服務(wù)器的同時(shí),也充當(dāng)客戶機(jī)的角色。其三,因?yàn)閷?duì)等網(wǎng)絡(luò)無(wú)需使用專業(yè)的服務(wù)器進(jìn)行網(wǎng)絡(luò)支持,所以也不用其他組件以提升網(wǎng)絡(luò)整體性能,所以組網(wǎng)成本不高,往往用于家庭或是中小型企業(yè)之中。
二、JAVA技術(shù)簡(jiǎn)述
JAVA是一種程序語(yǔ)言,其應(yīng)用范圍較廣,具有高效性以及通用性。JAVA技術(shù)具有一次性編寫但可以在任何系統(tǒng)中使用的特點(diǎn),從而使P2P應(yīng)用程序的應(yīng)用范圍得到拓展,令P2P應(yīng)用能應(yīng)用于不同的客戶端之中。不僅如此,如今P2P系統(tǒng)的使用數(shù)量雖然明顯增多,但彼此之間處于封閉狀態(tài),只在自身應(yīng)用范圍當(dāng)中占領(lǐng)位置。故而,SUN公司開發(fā)了完整的開源P2P項(xiàng)目,即JXTA,為P2P的應(yīng)用構(gòu)建了一個(gè)平臺(tái),使得以P2P應(yīng)用得以在相同的平臺(tái)之上構(gòu)建,通過(guò)使用該套JAVA類庫(kù),能夠使P2P網(wǎng)絡(luò)中JAVA的應(yīng)用更為簡(jiǎn)化。
JXTA開發(fā)的目的是為了構(gòu)建簡(jiǎn)易但能夠通用的P2P平臺(tái),以接納不同類型的網(wǎng)絡(luò)服務(wù)。利用JXTA技術(shù)所構(gòu)建的平臺(tái)定義了一套以XML為基礎(chǔ)生成的協(xié)議,以滿足peer,即對(duì)等點(diǎn)所形成的網(wǎng)絡(luò)需要通用這一功能的要求。需要注意,該套協(xié)議與操作系統(tǒng)、所用設(shè)備、開發(fā)過(guò)程中所用語(yǔ)言之間并沒(méi)有聯(lián)系,其是獨(dú)立的個(gè)體。如今,JXTA技術(shù)得到進(jìn)一步發(fā)展,其功能也有所提升,已然作為P2P研發(fā)應(yīng)用的專用平臺(tái)。
三、JAVA技術(shù)在P2P環(huán)境下的實(shí)際運(yùn)用
(一)程序開發(fā)
程序開發(fā)人員若要在P2P環(huán)境下運(yùn)用JAVA技術(shù)進(jìn)行程序開發(fā),應(yīng)先在系統(tǒng)當(dāng)中安裝jdk程序,從而為程序開發(fā)提供開發(fā)環(huán)境。等待jdk程序安裝完畢之后,程序開發(fā)人員還需從網(wǎng)頁(yè)中下載JXSE類庫(kù),其中含有大量P2P應(yīng)用程序在開發(fā)過(guò)程中所需使用的類庫(kù)。上述類庫(kù)文件會(huì)以多個(gè)文件包的形式向開發(fā)人員提供。至于集成開發(fā)環(huán)境,設(shè)計(jì)人員可使用Netbeans。構(gòu)建項(xiàng)目時(shí),開發(fā)人員還應(yīng)將JXSE類庫(kù)全部加載至項(xiàng)目類路徑之中。
程序開發(fā)環(huán)境建立完畢之后,開發(fā)人員開始以JXSE為基礎(chǔ)進(jìn)行P2P應(yīng)用程序的開發(fā)。因?yàn)樵陂_發(fā)過(guò)程中,JXSE可以將繁雜的P2P底層開發(fā)工作封裝,對(duì)大量接口以及API進(jìn)行抽象,以便P2P應(yīng)用開發(fā)人員進(jìn)行調(diào)用,使得開發(fā)人員在P2P環(huán)境下運(yùn)用JAVA技術(shù)開發(fā)應(yīng)用的難度大大降低。開發(fā)人員利用JXSE進(jìn)行P2P應(yīng)用程序的開發(fā)流程基本如下:添加默認(rèn)的NetPeerGroup,或是于默認(rèn)狀態(tài)下的對(duì)等組下方進(jìn)行創(chuàng)建,也可以添加其他對(duì)等組。之后等待獲得對(duì)等組所提供的發(fā)現(xiàn)服務(wù),通過(guò)該服務(wù)分享自己計(jì)算機(jī)當(dāng)中的資源,同時(shí)也可以搜索其他計(jì)算機(jī)中的資源,所有資源以通告的形式進(jìn)行表示。若該計(jì)算機(jī)需要同某一節(jié)點(diǎn)即時(shí)通訊,便需借助管道通告建立輸入以及輸出用管道,隨后將需要傳輸?shù)男畔?shù)據(jù)封裝為消息,利用所建立的管道進(jìn)行傳輸,令雙方都可傳輸或接收數(shù)據(jù)。應(yīng)用便是在上述流程之上建立而成的,通過(guò)上述流程可以分析得出,由于JXSE的存在,使得開發(fā)人員無(wú)需考慮P2P底層,程序開發(fā)難度下降。
(二)網(wǎng)絡(luò)通信
P2P環(huán)境下,JAVA技術(shù)不僅可以用于開發(fā)軟件,同時(shí)也可以實(shí)現(xiàn)JAVA網(wǎng)絡(luò)通信。具體實(shí)現(xiàn)方法如下:
其一,先獲取網(wǎng)絡(luò)當(dāng)中具有通信功能端點(diǎn)的IP以及端口。設(shè)存在一個(gè)端點(diǎn)A,該端點(diǎn)需要與P2P網(wǎng)絡(luò)當(dāng)中的其他端點(diǎn)實(shí)現(xiàn)通信。則該端點(diǎn)需先將自身IP以及端口告知其他端點(diǎn)。其他所有端點(diǎn)在收到端點(diǎn)A傳輸?shù)男畔⒅?,便獲取了端點(diǎn)A的端口信息以及IP,之后向端點(diǎn)A告知自身IP以及端口信息。端點(diǎn)A可利用多播技術(shù)完成向多個(gè)端點(diǎn)傳輸信息的任務(wù)。多播技術(shù)節(jié)省了網(wǎng)絡(luò)寬帶,也使得數(shù)據(jù)傳輸效率大大提高,避免了主干網(wǎng)出現(xiàn)擁擠、堵塞的現(xiàn)象。不僅如此,數(shù)據(jù)包可來(lái)源于不同的物理網(wǎng)絡(luò)。所以,開發(fā)人員應(yīng)使用多播信息的方式傳輸自身IP以及端口信息。JAVA當(dāng)中,發(fā)送多播信息的具體步驟如下:第一步,確認(rèn)發(fā)送的實(shí)際內(nèi)容。選取專門用于多播的D類IP地址,即(224.0.0.1至239.255.255.255),同時(shí)建立一個(gè)多播組。利用特定的端口設(shè)立多播套接字。第二步,加入該多播組,建立數(shù)據(jù)包封,添加需要發(fā)送的多播信息,之后點(diǎn)擊發(fā)送。
其二,與獲取的IP以及端口信息建立端點(diǎn)通信。以JAVA實(shí)現(xiàn)TCP通信的方式為例,用戶借助Socket(InetAddress addr,int port)以及Socket(String host,int port)建立客戶端套接字。之后使用ServerSocket(int port)建立服務(wù)器端套接字。Port端口便是通過(guò)服務(wù)器監(jiān)測(cè)請(qǐng)求相連的端口,利用調(diào)用accept()返還近期建立的Socket目標(biāo),該目標(biāo)與客戶應(yīng)用的IP以及端口號(hào)向綁定。之后借助調(diào)用Socket中g(shù)etInputStream()方式取得錄入流讀傳輸來(lái)的信息,從而建立網(wǎng)絡(luò)通信。
參考文獻(xiàn):
[1] 邵俊.基于java平臺(tái)的P2P應(yīng)用程序的實(shí)現(xiàn)[J].武漢大學(xué)學(xué)報(bào),2014.
作者簡(jiǎn)介:金宏亮(1991-),男,遼寧大連人,研究方向:信息科學(xué)與技術(shù)。