摘? ?要:Java網(wǎng)絡(luò)編程技術(shù)是一個(gè)重要的Java程序設(shè)計(jì)環(huán)節(jié),在組播技術(shù)中Java網(wǎng)絡(luò)編程有廣泛的應(yīng)用。組播技術(shù)屬于3種IP網(wǎng)絡(luò)數(shù)據(jù)傳輸方式之一,較單播與廣播方式的效果更高,本文基于Java網(wǎng)絡(luò)編程與Java平臺(tái)設(shè)計(jì)了一個(gè)組播程序,并進(jìn)行了實(shí)驗(yàn),實(shí)驗(yàn)成功,在組播技術(shù)中運(yùn)用Java平臺(tái)可行性高,效率更佳。
關(guān)鍵詞:Java網(wǎng)絡(luò)編程;組播技術(shù);套接字
Java網(wǎng)絡(luò)編程技術(shù)是一個(gè)重要的Java程序設(shè)計(jì)環(huán)節(jié),具有強(qiáng)大的跨平臺(tái)網(wǎng)絡(luò)庫(kù)的語(yǔ)言優(yōu)勢(shì),在組播技術(shù)中Java網(wǎng)絡(luò)編程有廣泛的應(yīng)用。組播技術(shù)屬于3種IP網(wǎng)絡(luò)數(shù)據(jù)傳輸方式之一,較單播與廣播方式的效果更高,目前主要在224.0.0.0到239.255.255.255的IPv4組播地址范圍內(nèi)進(jìn)行組播。
1? ? Java網(wǎng)絡(luò)編程的組播結(jié)構(gòu)
網(wǎng)絡(luò)數(shù)據(jù)的傳輸分為3種常見(jiàn)類型,即單播、組播和廣播,其中,組播具有兼容特性,是對(duì)單播和廣播的兼容,能實(shí)現(xiàn)數(shù)據(jù)的組內(nèi)傳遞和輸送,并且所有接受者都能收到,在組內(nèi)的發(fā)送者和每一個(gè)接受者之間,能實(shí)現(xiàn)多點(diǎn)網(wǎng)絡(luò)傳輸,數(shù)據(jù)的覆蓋面更加寬廣。組播是一種中間技術(shù),數(shù)據(jù)傳遞的方式主要是由發(fā)送方傳輸給另一方,將相同的數(shù)據(jù)包通過(guò)路由器動(dòng)態(tài)決定數(shù)據(jù)的路由,尋找組播的地址。必要時(shí),還能獲取賦值數(shù)據(jù),將通過(guò)組播中間技術(shù),其傳輸給每一個(gè)主機(jī),能極大地提升數(shù)據(jù)傳遞的速度,減少骨干網(wǎng)絡(luò)的擁塞情況,能更加適用于現(xiàn)代快速數(shù)據(jù)傳播的工作模式中,滿足實(shí)際需求。整個(gè)結(jié)構(gòu)系統(tǒng)的數(shù)據(jù)傳遞從接收端開始,使用Java Socket的組播類進(jìn)行的一個(gè)組播案例。發(fā)送端將數(shù)據(jù)發(fā)送到主機(jī)或者每一個(gè)用戶對(duì)象,通過(guò)多個(gè)接收端,開啟發(fā)送端,實(shí)現(xiàn)組播間數(shù)據(jù)傳遞。
2? ? 組播Socket技術(shù)
Java網(wǎng)絡(luò)編程主要是通過(guò)Java.net中的MulticastSocket類組建一個(gè)Socket,作為組播數(shù)據(jù)。先建立一個(gè)MulticastSocket。通過(guò)其中的joinGroup()與一個(gè)組播組建立連接,并參與其中。建立一個(gè)DatagramPacket,通過(guò)字節(jié)數(shù)組構(gòu)建一個(gè)數(shù)據(jù)緩沖區(qū)域,放置一個(gè)循環(huán)體,以繼承DatagramPacket類的receive()方法,無(wú)需數(shù)據(jù)接收時(shí),通過(guò)調(diào)用這一Socket的leaveGroup()法與組播組斷開連接,利用繼承DatagramPacket類的receive()方法將該Socket關(guān)閉。需要向組播地址傳輸數(shù)據(jù)時(shí),則無(wú)需加入組播組中,直接新建一個(gè)DatagramPacket,并將數(shù)據(jù)與組播組地址填充,利用send()法直接傳輸數(shù)據(jù)即可。
3? ? 基于Java網(wǎng)絡(luò)編程中組播技術(shù)的應(yīng)用
3.1? 前期準(zhǔn)備工作
首先安裝JDK軟件與Eclipse軟件,并在Eclipse軟件中,將相關(guān)Java源程序編寫工作完成。
3.2? 創(chuàng)建MulticastReceive作為接收端類
(1)創(chuàng)建一個(gè)組播地址及端口。組播地址創(chuàng)建方法為:InetAddress group=InetAddress.getByName("228.0.0.1")。端口創(chuàng)建方法為:int port=8000;其中,228.0.0.1指組播地址,8000則是端口。
(2)創(chuàng)建組播套接字符并加入到一個(gè)組播組中。組播套接字符創(chuàng)建方法為:MulticastSocket msr=new MulticastSocket(port)。組播組加入方法為:msr.joinGroup(group)。MulticastSocket創(chuàng)建后,就能夠順利進(jìn)行后續(xù)的組播組加入、向組中成員發(fā)送數(shù)據(jù)或接收來(lái)自于組中成員的數(shù)據(jù)以及離開組播組等各項(xiàng)與組播組相關(guān)的操作。
(3)建立一個(gè)數(shù)據(jù)緩沖區(qū)。需要?jiǎng)?chuàng)建一個(gè)指定緩沖區(qū)大小及組播地址和端口的 DatagramPacket 組播數(shù)據(jù)包對(duì)象,創(chuàng)建方法為:
byte[]buffer=new byte[8192];
DatagramPacket dp=new DatagramPacket(buffer,buffer.length)
(4)接收對(duì)應(yīng)的組播數(shù)據(jù)包。接收方法為:msr.receive(dp);
(5)解碼該組播數(shù)據(jù)包并提取所需信息。方法為:
String s=nwe Sring(dp.getData(),0,dp.getLength());
接收端代碼可設(shè)計(jì)如圖1所示。
3.3? 創(chuàng)建MulticastSend作為發(fā)送端類
(1)建立一個(gè)組播地址與端口。組播地址創(chuàng)建方法為:InetAddress group=InetAddress.getByName(''228.0.0.1'');端口創(chuàng)建方法為:int port=8000;發(fā)送端組播地址和端口要與接收端地址和端口保持一致。
(2)建立一組組播套接字符并加入到一個(gè)組播組中。組播套接字符創(chuàng)建方法為:MulticastSocket mss=new MulticastSocket(port);組播組加入方法為:mss.joinGroup(group);
(3)建立一個(gè)數(shù)據(jù)緩沖區(qū),并匹配一個(gè)組播地址與端口組播數(shù)據(jù)包。創(chuàng)建方法為:
byte[]buffer=message.getBytes();
DatagramPacket dp=new DatagramPacket(buffer,buffer.length,group,port);
mss.sen(dp);
send()的功能在于將DatagramSocket對(duì)應(yīng)的數(shù)據(jù)包發(fā)送出去。無(wú)需接收數(shù)據(jù)時(shí),直接調(diào)用該Socket的leaveGroup()法與該組播組脫離連接,同時(shí)關(guān)閉這一Socket。發(fā)送端代碼如圖2所示。
發(fā)送端代碼4? ? 實(shí)驗(yàn)結(jié)果
對(duì)以上應(yīng)用研究分析得出,編寫Java組播技術(shù)應(yīng)用程序,需要包括如下基礎(chǔ)步驟。
(1)建立一個(gè)MulticastSocker組播套接字符對(duì)象,確保發(fā)送端與接收端有可供使用的數(shù)據(jù)。
(2)建立一個(gè)DatagramPacket組播數(shù)據(jù)包對(duì)象,并指定其緩沖區(qū)大小、地址、端口,同時(shí),要保證發(fā)送端與接收端使用同樣的組播地址與端口。
(3)通過(guò)組播套接字符joinGroup()加入到一個(gè)組播中。
(4)在組播中加入組播數(shù)據(jù)包對(duì)象,并通過(guò)組播套接字符中的receive()與send()接收或發(fā)送組播數(shù)據(jù)包。
(5)解碼并提取發(fā)送或接收到組播數(shù)據(jù)包信息,根據(jù)獲得的信息采取相應(yīng)的響應(yīng)動(dòng)作。
(6)通過(guò)while循環(huán)對(duì)第四與第五個(gè)步驟進(jìn)行重復(fù)。
(7)組播套接字符中的leaveGroup()可用于離開、關(guān)閉組播套接字。
通過(guò)以上步驟及代碼建立一個(gè)組播后,運(yùn)行結(jié)果如圖3所示,準(zhǔn)備好接收端后,能夠發(fā)現(xiàn)發(fā)送端會(huì)一直保持?jǐn)?shù)據(jù)發(fā)送動(dòng)作,實(shí)驗(yàn)成功,證明方法可行。
5? ? 結(jié)語(yǔ)
隨著現(xiàn)代互聯(lián)網(wǎng)技術(shù)水平不斷提升,組播技術(shù)在當(dāng)今人類社會(huì)生活和工作中的應(yīng)用非常廣泛,尤其是視頻直播、大型游戲等,且人們對(duì)組播數(shù)據(jù)傳遞也不斷在提出新要求。因此,不斷提升組播數(shù)據(jù)傳播的效率,是當(dāng)前一個(gè)重要的研究問(wèn)題,通過(guò)Java網(wǎng)絡(luò)編程,對(duì)其結(jié)構(gòu)進(jìn)行優(yōu)化,最終能提升組播路由算法的傳播效率,不斷滿足各個(gè)企業(yè)的發(fā)展需求,并且這種組播技術(shù)的應(yīng)用推廣,最終呈現(xiàn)一定的特點(diǎn),成為目前非常理想的組播算法的主流方法。作者簡(jiǎn)介:趙文清(1996— ),女,河南商丘人,本科生;研究方向:網(wǎng)絡(luò)工程,網(wǎng)絡(luò)編輯。