Java DatagramSocket从不接收

Java DatagramSocket从不接收,java,networking,udp,Java,Networking,Udp,尽管我知道我的UDP数据包正在按预期到达(通过Wireshark),并且关闭了Windows防火墙,但我非常简单的Java代码从未收到任何数据包 byte[] buffer = new byte[2048]; DatagramSocket socket = new DatagramSocket( 50000 ); DatagramPacket packet = new DatagramPacket( buffer, buffer.length ); socket.receive( packet

尽管我知道我的UDP数据包正在按预期到达(通过Wireshark),并且关闭了Windows防火墙,但我非常简单的Java代码从未收到任何数据包

byte[] buffer = new byte[2048];
DatagramSocket socket = new DatagramSocket( 50000 );
DatagramPacket packet = new DatagramPacket( buffer, buffer.length );
socket.receive( packet );
我有3个网络适配器在我的机器上,所以我试着非常具体的IP。我尝试设置套接字以查看数据包到达的本地地址,但没有收到任何信息。我还尝试将套接字连接到发送数据包的远程IP,但没有收到任何信息。Wireshark一直在看到每秒160个数据包全部到达

我唯一的另一个想法是,我没有在发送端计算UDP校验和(UDP数据包在嵌入式系统上“手工”组装),它只是被设置为0x0000-是否
DatagramSocket
放弃没有校验和的UDP数据包


根据@Andreas的建议,我编写了一个简单的测试服务器来帮助诊断问题

InetAddress outAddr = InetAddress.getLocalHost();
InetAddress inAddr = InetAddress.getByName( "192.178.178.0" );

byte[] buffer = ( "Hello" ).getBytes();
DatagramSocket socket = new DatagramSocket( 50000, outAddr );
while ( true ) {
    DatagramPacket packet = new DatagramPacket( buffer, buffer.length, 
                                                inAddr, 50000 );
    socket.send( packet );

    try {
        Thread.sleep( 500 );
    } catch ( InterruptedException e ) {
        // Ignore.
    }
}
Wireshark尽职尽责地指出,它正在接收所有这些数据,但我的客户机仍然没有,即使在明确设置接收IP的情况下:

InetAddress inAddr = InetAddress.getByName( "192.178.178.0" );
DatagramSocket socket = new DatagramSocket( 50000, inAddr );
...
socket.receive( packet );


不过,我刚刚注意到一些奇怪的事情,当我检查哪个
NetworkInterface
用于发送和接收时,Java会报告正确的一个(即“拥有”192.178.178.0的一个)-但是Wireshark只会在不同的网络设备上看到我的测试服务器数据包。有什么想法吗?

好吧,这太尴尬了。我关闭了专用网络和工作网络的Windows防火墙,但事实证明Windows是我真正需要的一个公共网络


现在很好用。我考虑删除这个问题,但希望它能对其他木偶有所帮助。

这个套接字的防火墙设置是什么?我怀疑wireshark可以超越您的操作系统防火墙。您是否考虑过在Java中实现一个简单的UDP发送器来检查您的数据包接收代码是否正常工作?据我所知,UDP校验和是可选的-如果它是0,它应该是ignored@PeterLawreyWindows防火墙已关闭,它直接连接到嵌入式系统中的交换机-在这一端没有硬件或软件防火墙。@Andreas我创建了一个发送和接收UDP消息的简单应用程序,它成功了——但Wireshark从未看到任何数据包!所以我放弃了它。但是你是对的,为我的“正确”代码创建一个服务器绝对是一个好的测试想法。如果你监听你看到的数据包被发送到的IP地址,会发生什么。我怀疑DatagramSocket绑定到您的默认接口,只监听一些IP地址,而不是该端口的所有IP地址。不过,您应该接受这个答案,以表明问题已经解决。有两天的等待时间,它才会允许我使用。@cmannett85您所说的话到底是什么意思“Windows认为我实际上需要的是一个公共网络”?