我曾尝试几次编写一个简单的UDP组播接收器,但仍感到困惑。
在我的代码未能按预期工作后,我尝试了Vertx文档中发布的确切示例:
DatagramSocket socket = vertx.createDatagramSocket(new DatagramSocketOptions());
socket.listen(1234, "0.0.0.0", asyncResult -> {
if (asyncResult.succeeded()) {
socket.handler(packet -> {
// Do something with the packet
});
// join the multicast group
socket.listenMulticastGroup("230.0.0.1", asyncResult2 -> {
System.out.println("Listen succeeded? " + asyncResult2.succeeded());
});
} else {
System.out.println("Listen failed" + asyncResult.cause());
}
});
执行后,我得到了以下异常:
java.lang.NullPointerException: networkInterface
at io.netty.channel.socket.nio.NioDatagramChannel.joinGroup(NioDatagramChannel.java:409)
at io.netty.channel.socket.nio.NioDatagramChannel.joinGroup(NioDatagramChannel.java:368)
at io.netty.channel.socket.nio.NioDatagramChannel.joinGroup(NioDatagramChannel.java:362)
at io.vertx.core.datagram.impl.DatagramSocketImpl.listenMulticastGroup(DatagramSocketImpl.java:90)
当提供正确的网络接口IP地址(例如192.168.178.52)而不是0.0.0.0时,我可以使其工作。但是,这意味着需要遍历所有网络接口并为每个接口添加一个套接字。
有什么想法吗?谢谢!
NetworkInterface.getByInetAddress(localAddress().getAddress())
出了问题。 - lexicore