Java 使用 MulticastSocket 类创建 UDP 多播套接字以接收发送到多播 IP 地址的数据报包。
多播套接字基于组成员身份。创建并绑定多播套接字后,调用其 joinGroup(InetAddress multiCastIPAddress) 方法加入多播组,发送到该组的任何数据报包都将传递到该套接字。
要离开组,请调用 leaveGroup(InetAddress multiCastIPAddress) 方法。
在 IPv4 中,224.0.0.0 到 239.255.255.255 范围内的任何 IP 地址都可以用作多播地址来发送数据报包。
IP 地址 224.0.0.0 是保留的,您不应在您的应用程序中使用它。
多播 IP 地址不能用作数据报包的源地址。
?
例子
接收 UDP 多播消息的 UDP 多播套接字。
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
public class UDPMulticastReceiver {
public static void main(String[] args) throws Exception {
int mcPort = 12345;
String mcIPStr = "230.1.1.1";
MulticastSocket mcSocket = null;
InetAddress mcIPAddress = null;
mcIPAddress = InetAddress.getByName(mcIPStr);
mcSocket = new MulticastSocket(mcPort);
System.out.println("Multicast Receiver running at:" + mcSocket.getLocalSocketAddress());
mcSocket.joinGroup(mcIPAddress);
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
System.out.println("Waiting for a multicast message...");
mcSocket.receive(packet);
String msg = new String(packet.getData(), packet.getOffset(), packet.getLength());
System.out.println("[Multicast Receiver] Received:" + msg);
mcSocket.leaveGroup(mcIPAddress);
mcSocket.close();
}
}
上面的代码生成以下结果。
?
示例 2
UDP 数据报套接字,多播发送方应用程序。
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPMulticastSender {
public static void main(String[] args) throws Exception {
int mcPort = 12345;
String mcIPStr = "230.1.1.1";
DatagramSocket udpSocket = new DatagramSocket();
InetAddress mcIPAddress = InetAddress.getByName(mcIPStr);
byte[] msg = "Hello".getBytes();
DatagramPacket packet = new DatagramPacket(msg, msg.length);
packet.setAddress(mcIPAddress);
packet.setPort(mcPort);
udpSocket.send(packet);
System.out.println("Sent a multicast message.");
System.out.println("Exiting application");
udpSocket.close();
}
}
上面的代码生成以下结果。