模块 java.base
 java.net

类 MulticastSocket

java.lang.Object
java.net.DatagramSocket
java.net.MulticastSocket
所有已实现的接口:
Closeable , AutoCloseable

public class MulticastSocket extends DatagramSocket
MulticastSocket 是一个数据报套接字,方便发送和接收 IP 多播数据报。 MulticastSocket 构造函数创建一个套接字,并启用适当的套接字选项,使其适合接收多播数据报。 MulticastSocket 类还为多播应用程序常用的套接字选项定义了方便的 setter 和 getter 方法。

加入一个或多个多播组可以接收发送到这些组的多播数据报。

IPv4 多播组由 D 类 IP 地址和标准 UDP 端口号指定。 D 类 IP 地址在 224.0.0.0239.255.255.255 范围内(含)。地址 224.0.0.0 已保留,不应使用。

加入多播组的方法是首先创建一个具有所需端口的 MulticastSocket,然后调用 joinGroup 方法,指定组地址和接收多播数据报的网络接口:


 // join a Multicast group and send the group salutations
 ...
 String msg = "Hello";
 InetAddress mcastaddr = InetAddress.getByName("228.5.6.7");
 InetSocketAddress group = new InetSocketAddress(mcastaddr, 6789);
 NetworkInterface netIf = NetworkInterface.getByName("bge0");
 MulticastSocket s = new MulticastSocket(6789);

 s.joinGroup(new InetSocketAddress(mcastaddr, 0), netIf);
 byte[] msgBytes = msg.getBytes(StandardCharsets.UTF_8);
 DatagramPacket hi = new DatagramPacket(msgBytes, msgBytes.length, group);
 s.send(hi);
 // get their responses!
 byte[] buf = new byte[1000];
 DatagramPacket recv = new DatagramPacket(buf, buf.length);
 s.receive(recv);
 ...
 // OK, I'm done talking - leave the group...
 s.leaveGroup(group, netIf);
  
当一个人向多播组发送消息时,全部订阅该主机和端口的收件人接收消息(在数据包的生存时间范围内,见下文)。套接字不需要是多播组的成员就可以向它发送消息。

当套接字订阅多播组/端口时,它接收其他主机发送到组/端口的数据报,组和端口的所有其他成员也是如此。套接字通过 leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf) 方法放弃组中的成员资格。多个 MulticastSocket可以同时订阅一个多播组和端口,它们都会收到组数据报。

DatagramSocketMulticastSocket 类定义了方便的方法来设置和获取多个套接字选项。与 DatagramSocket 一样,此类也支持 setOption getOption 方法来设置和查询套接字选项。 支持的套接字选项集在 DatagramSocket 中定义。还可以支持其他(特定于实现的)选项。

API 注意:
DatagramSocket 可直接用于发送和接收多播数据报。 DatagramChannel 实现 MulticastChannel 接口并提供用于发送和接收多播数据报的替代 API。 MulticastChannel API 支持 任何来源来源特定 多播。考虑使用 DatagramChannel 进行多播。
自从:
1.1