Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能';我看不到java应用程序中的udp多播通信,而我可以从wireshark中看到_Java_Networking_Udp_Nio_Wireshark - Fatal编程技术网

我能';我看不到java应用程序中的udp多播通信,而我可以从wireshark中看到

我能';我看不到java应用程序中的udp多播通信,而我可以从wireshark中看到,java,networking,udp,nio,wireshark,Java,Networking,Udp,Nio,Wireshark,我正在尝试加入udp多播组,以便在jdk 1.8+环境下的Windows 7中接收udp数据 我正在使用NIO DatagramChannel接收数据。 看来我的程序运行得很好,因为一旦我加入多播组,我就可以看到udp流量通过wireshark进入。(当我的程序未运行时,我看不到任何udp通信。) 但当我尝试接收上述数据时,它总是返回null。 我曾经用不同的环境运行这个程序,到目前为止,这些环境运行得很好。我找不到任何线索来解决这个问题 我将感谢任何帮助或暗示 我是个傻瓜,我甚至没有想到防火墙

我正在尝试加入udp多播组,以便在jdk 1.8+环境下的Windows 7中接收udp数据

我正在使用NIO DatagramChannel接收数据。 看来我的程序运行得很好,因为一旦我加入多播组,我就可以看到udp流量通过wireshark进入。(当我的程序未运行时,我看不到任何udp通信。)

但当我尝试接收上述数据时,它总是返回null。 我曾经用不同的环境运行这个程序,到目前为止,这些环境运行得很好。我找不到任何线索来解决这个问题


我将感谢任何帮助或暗示

我是个傻瓜,我甚至没有想到防火墙。 此电脑中安装的第三方安全软件保护我的程序以接收数据包


谢谢各位。

您的代码片段不足以理解问题所在。试着看一下下面的教程:这是您正在运行的代码吗?您使用的是非阻塞信道,如果在您调用
channel.receive(buf)的准确时间恰好到达一个数据包,您将非常非常幸运。你有没有试过使用阻塞通道?谢谢你的建议,通常我愿意听的UDP通道是超级泛洪的。所以我使用了非阻塞模式。。。。但我也尝试了
channel.configureBlock(true)
来解决问题,但不幸的是没有起作用,我想可能有一些东西我应该像linux系统中的rp_filter那样检查。。。但我不知道那是什么。。。
InetAddress group = InetAddress.getByName(UDPGROUP_IP);
NetworkInterface ni = NetworkInterface.getByInetAddress(InetAddress.getByName(MY_IP));
DatagramChannel channel = DatagramChannel.open(StandardProtocolFamily.INET) ;

channel.setOption(StandardSocketOptions.SO_REUSEADDR, true).bind(new InetSocketAddress(port));
channel.join(group,ni);

channel.configureBlocking(false);

SocketAddress sa;
ByteBuffer buf = ByteBuffer.allocate(1024);

sa = channel.receive(buf);
if (sa != null ){

    byte[] byteReceived = new byte[BYTELEN]; 
    buf.flip();
    buf.get(byteReceived, 0, buf.limit());

    DefaultLogger.logger.info("Received :{}" , new String(byteReceived));

}