日期:2014-05-20  浏览次数:20834 次

寻求组播的异步通信方法(MulticastChannel)!!!

// join multicast group on this interface, and also use this
     // interface for outgoing multicast datagrams
     NetworkInterface ni = NetworkInterface.getByName("hme0");

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

     InetAddress group = InetAddress.getByName("225.4.5.6");

     MembershipKey key = dc.join(group, ni);


这是一段从javadoc上copy的示例代码。没怎么看懂,特别是头两句。。。解释下吧。。。

我想用nio包中的异步通信的模式来实现组播的客户端的接收,而不是传统的模式。这样应该可以节省客户端占用的资源,不用一直处于监听状态!是吗???(我用传统的监听模式,一台电脑开一个服务端和两个客户端,cpu就能达到60%了= =。)

后面发现jdk 7中的multicastChannel应该可以实现我所想达到的效果,但不知道如何用,求指点。。。

------解决方案--------------------
JDK 7 的 sample 中就有例了,为啥不去看看呢?

在 JDK 7 sample 的 nio\multicast 目录中。

JDK 7 的 demo 和 sample 在这里下载:
http://www.oracle.com/technetwork/java/javase/downloads/index.html