byte[] b = new byte[BUFFER_LENGTH];
DatagramPacket dgram = new DatagramPacket(b, b.length);
MulticastSocket socket =
new MulticastSocket(DEST_PORT); // must bind receive side
socket.joinGroup(InetAddress.getByName(MCAST_ADDR));
while(true) {
socket.receive(dgram); // blocks until a datagram is received
System.err.println("Received " + dgram.getLength() +
" bytes from " + dgram.getAddress());
dgram.setLength(b.length); // must reset length field!
}
发送组播数据报
为了在 Java 中发送任何类型的数据报,无论是单播、广播还是多播,都需要一个
java.net.DatagramSocket
:可以选择为套接字必须绑定到的 DatagramSocket 构造函数提供本地端口。仅当需要其他方能够在特定港口与我们联系时才需要这样做。第三个构造函数获取要绑定的本地端口和本地 IP 地址。这(很少)用于多宿主主机,其中接收流量的网络适配器很重要。
接收组播数据报
可以使用普通的 DatagramSocket 来发送和接收单播和广播数据报以及发送多播数据报。然而,为了接收多播数据报,需要一个 MulticastSocket。原因很简单,需要做额外的工作来控制和接收 UDP 下所有协议层的多播流量。
想要查询更多的信息: