【问题标题】:How do I implement a multicast client in NIO.2?如何在 NIO.2 中实现多播客户端?
【发布时间】:2014-02-20 12:37:53
【问题描述】:

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

【问题讨论】:

    标签: java nio multicast


    【解决方案1】:

    这个例子有效。请注意,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
        }
    }
    

    【讨论】:

    • 大多数硬件都支持多播吗?如果没有怎么办?
    • 多播是否有效取决于底层网络堆栈。我猜如果系统不支持多播,DatagramChannel.join() 应该抛出异常,但这可能是特定于实现的。
    • 感谢 Sundae 提供了这个最简洁(阻塞)的 nio 示例 - 正是医生所要求的! +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多