使用java的多播套接字时,我可以使用以下代码加入多播组,而无需指定NetworkInterface
:
MulticastSocket sock = new MulticastSocket(PORT);
sock.joinGroup(ADDR);
另一方面,如果我想使用NIO,我可以这样做:
DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)
.setOption(StandardSocketOptions.SO_REUSEADDR, true)
.bind(new InetSocketAddress(PORT))
.setOption(StandardSocketOptions.IP_MULTICAST_IF, IFC);
dc.join(ADDR, IFC);
其中IFC
是我感兴趣的NetworkInterface
。
如果我事先不知道网络接口,我如何加入像MulticastSocket?
我找到的一个解决方案是使用此代码:
MulticastSocket msock = new MulticastSocket();
NetworkInterface ifc = msock.getNetworkInterface();
msock.close();
DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)
.setOption(StandardSocketOptions.SO_REUSEADDR, true)
.bind(new InetSocketAddress(PORT))
.setOption(StandardSocketOptions.IP_MULTICAST_IF, ifc);
dc.join(ADDR, ifc);
令人惊讶的是,这段代码按预期工作并执行,当查看MulticastSocket.getNetworkInterface()
方法返回的NetworkInterface时,我看到它返回了一个名为" 0.0.0.0"的接口。这当然不存在。此外,无法与任何NetworkInterface.*
工厂
解决方案可靠吗?任何人都可以解释为什么它有效,如果有更好的方法来实现我想要的东西?
答案 0 :(得分:0)
我使用本地地址可以找到局域网设备!所以你可以尝试一下!
例如
$rootScope.$on( "$routeChangeSuccess", ... )