如何在NIO.2中实现多播客户端?

4

使用Java 7 NIO.2中的多播客户端示例是怎样的呢?在MulticastChannel文档中只找到了一半的示例。

1个回答

4

这个例子可用。请注意,DatagramChannel.join()需要一个NetworkInterface才能正常工作。

NetworkInterface ni = NetworkInterface.getByInetAddress(address);
InetAddress group = InetAddress.getByName("239.255.0.1")

DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)
    .setOption(StandardSocketOptions.SO_REUSEADDR, true)
    .bind(new InetSocketAddress(5000))
    .setOption(StandardSocketOptions.IP_MULTICAST_IF, ni);
MembershipKey key = dc.join(group, ni);

ByteBuffer byteBuffer = ByteBuffer.allocate(1500);
while (true) {
    if (key.isValid()) {
        byteBuffer.clear();
        InetSocketAddress sa = (InetSocketAddress) dc.receive(byteBuffer);
        byteBuffer.flip();

        System.out.println("Multicast received from " + sa.getHostString());

        // TODO: Parse message
    }
}

大多数硬件都支持组播吗?如果不支持怎么办? - Ivan Voroshilin
无论组播是否起作用都取决于底层网络堆栈。我猜想如果系统不支持组播,DatagramChannel.join()应该会抛出异常,但这可能是实现特定的。 - Sundae
感谢 Sundae 提供这个最小且简洁(阻塞式)的 nio 示例 - 正是医生所开的药方!+1 - Evgeniy Berezovsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接