組播是一種允許源進程將數據包發送到多個目標進程的網絡技術。組播源將數據包發送到特定組播組,只有屬于該組播組的進程才能接收到數據包。這些進程可以是在同一個物理網絡,也可以來自不同的物理網絡(只要有組播路由器支持)。
組播分為無連接和面向連接組播,但是基本的組播機制是無連接的,我們這里所講的也是無連接組播。
我們說過使用multicastsocket類,這個類叫組播數據報套接字類,主要用來發送和接收ip組播報文。multicastsocket是datagramsocket的子類,它增加了加入和離開組播組的功能。組播組通過一個d類ip地址和一個標準udp端口號的組合來定義。d類ip地址的范圍是224.0.0.0~239.255.255.255,除了224.0.0.0是保留地址,不應使用。
下面我們用一個簡單的示例演示兩個進程如何使用組播進行通信,這兩個進程一個是發送端進程,另一個是接收端進程。
我們看代碼:
sender.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import java.net.datagrampacket; import java.net.inetaddress; import java.net.multicastsocket; public class sender { public static void main(string[] args) { try { byte [] msg = new byte [] { 'h' , 'e' , 'l' , 'l' , 'o' }; inetaddress inetaddress = inetaddress.getbyname( "230.0.0.1" ); //根據主機名返回主機的ip地址 datagrampacket datagrampacket = new datagrampacket(msg, msg.length, inetaddress, 7777 ); //數據包包含消息內容,消息長度,組播ip和端口 multicastsocket multicastsocket = new multicastsocket(); multicastsocket.send(datagrampacket); //發送數據包 } catch (exception exception) { exception.printstacktrace(); } } } |
receiver.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import java.net.datagrampacket; import java.net.inetaddress; import java.net.multicastsocket; public class receiver { public static void main(string[] arstring) { try { multicastsocket multicastsocket = new multicastsocket( 7777 ); //創建組播套接字并綁定到發送端口 inetaddress inetaddress = inetaddress.getbyname( "230.0.0.1" ); multicastsocket.joingroup(inetaddress); //組播套接字加入組播組 while ( true ) { byte [] data = new byte [ 100 ]; datagrampacket datagrampacket = new datagrampacket(data,data.length); //創建一個用于接收數據的數據包 multicastsocket.receive(datagrampacket); //接收數據包 system.out.println( new string(data)); } } catch (exception exception) { exception.printstacktrace(); } } } |
使用multicastsocket實現組播的要點如下:
接收方:加入組播組;
發送方:發送包含組地址的數據報。
順便提一下組播實現私信的做法:我們可以在消息頭部加上指定接收者地址,然后使用組播的方式發送,關鍵在接收的時候檢查該地址,如果跟匹配該地址,就接收并處理;如果不匹配當然就拋棄。當然這明顯有安全問題,以后找到解決辦法或者單播機制再另寫一篇博文了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/whoami021/article/details/21337651