舒小松



摘 要:Java網絡編程技術是Java程序設計中重要的一個環節。Java程序設計中提供了很強大的跨平臺網絡庫的語言。組播技術在Java網絡編程中的應用很廣泛,它兼容單播和廣播的特點。當采用組播方式傳送數據包時,發送方只需要發送一份相同的數據包,通過路由器尋找組播組的地址,然后將數據發送到這個組的每一個主機中。它可以大大提高數據傳送效率,減少了核心網絡出現網絡擁塞的可能性。文章通過一個詳細的案例介紹了Java網絡編程中組播技術在Java平臺中的應用,并進行了相關的分析與研究。
關鍵詞:Java;組播;套接字;網絡編程
Java網絡編程技術是Java程序設計中重要的一個環節。Java程序設計中提供了很強大的跨平臺網絡庫的語言。Java網絡編程中組播技術應用很廣泛,它是IP網絡數據傳輸3種方式之一,組播解決了單播和廣播方式效率低的問題。目前IPv4組播地址的范圍為224.0.0.0到239.255.255.255之間。
1 組播Socket介紹
在Java中,要使用Java.net中的MulticastSocket類來組播數據[1]。具體的步驟如下:首先,創建一個MulticastSocket。其次,用MulticastSocket的ijoinGroup()方法加入到一個組播組。再次,創建一個DatagramPacket,用字節數組作為數據緩沖區,并放入循環體繼承DatagramPacket類的receive()方法,不需要接收數據時調用該Socket的leaveGroup()方法離開組播組,然后用繼承DatagramPacket類的close()方法關閉該Socket。注意:如果向組播地址發送數據可以不需要加入組播組,可以創建一個新的DatagramPacket,在其中填充數據和組播組的地址,并傳輸send()方法即可。
2 Java組播Socket網絡編程的應用與研究
2.1 前期的基本操作
安裝好JDK以及Eclipse軟件。進入Eclipse,編寫相關Java源程序。
2.2 創建接收端類MulticastReceive
2.2.1 創建組播地址和端口
(1)需要創建一個組播地址。
InetAddress group - InetAddress.getByName(”228.0.0.1”);
(2)需要創建一個端口。
int port= 8000;
上述代碼中,組播地址為228.0.0.1,端口為8000。
2.2.2 創建組播套接字并加入到組播組
(1)創建一個組播套接字。
MulticastSocket msr -new MulticastSocket(port);
(2)加入到一個組播組。
msrjoinGroup(group);
一旦創建了MulticastSocket就可以完成加入組播組、向組中任何成員發送數據、接受組中任何成員的數據、離開該組播組等4種操作。
2.2.3 創建一個指定緩沖區大小組播數據包
byte[] buffer= new byte[8192];
DatagramPacket dp=new DatagramPacket(buffer,buffer.length);
2.2.4 接受組播數據包
msr.receive(dp);
2.2.5 解碼組播數據包提取信息
String s=new String(dp.getData(),O,dp.getLength(》;
接收端代碼如圖1所示。
2.3 創建發送端類MulticastSend
2.3.1 創建組播地址和端口
(1)需要創建一個組播地址。
InetAddress group = InetAddress.getByName(”228.0.0.1”);
(2)需要創建一個端口。
int port= 8000;
需要注意的是發送端的組播IP地址和端口需要和接收端的IP地址及端口一致。
2.3.2 創建組播套接字并加入到組播組
MulticastSocket mss - new MulticastSocket(port);
mssjoinGroup(group);
2.3.3 建立一個指定緩沖區大小及組播地址和端口組播數據包
byte口buffer= message.getBytes();
DatagramPacket dp=new DatagramPacket(buffer,buffer.length,group,port);
mss.send(dp);
其中send()方法的作用是用于發送DatagramSocket對應的數據包。注意的是如果不需要接收數據時調用該Socket的leaveGroup()方法離開組播組,并關閉Socket。發送端代碼如圖2所示。
3 結語
通過Java Socket網絡編程中Java組播Socket的應用研究,使我們對Java Socket網絡編程有了新的認識,并得出結論。編寫一個Java組播應用程序需要完成如下過程[2]。
(1)創建一個MulticastSocket組播套接字對象,為發送端和接收端使用。
(2)創建一個DatagramPacket組播數據包對象,需要指定其緩沖區大小及組播地址和端口。注意發送端和接收端中組播地址和端口一致。
(3)使用組播套接字joinGroup(),將其加入到同一個組播。
(4)將組播數據包對象放入其中,組播套接字的send()方法中或者組播套接字的receive()方法中發送組播數據包或者接收組播數據包。
(5)解碼組播數據包提取信息,并依據得到的信息作出響應。
(6)在while循環中重復步驟4和5。
(7)使用組播套接字的leaveGroup()方法,離開組播組并關閉組播套接字。
運行結果如圖3所示,接收端準備好以后,發送端就一直會發送數據,實驗成功。
[參考文獻]
[1]哈諾德.Java網絡編程[M]李帥,荊濤,譯北京:中國電力出版社,2014.
[2]馬曉敏,肖明,姜遠明,等Java網絡編程原理與JSP Web開發核心技術[M].北京:中國鐵道出版社,2010.