DatagramSocket永远不会收到

时间:2012-12-11 09:05:59

标签: 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 );

我的机器上有3个网络适配器,所以我尝试了非常具体的IP。我尝试设置套接字来查看数据包到达的本地地址 - 没有收到任何内容。我还尝试将套接字连接到发送数据包的远程IP - 没有收到任何东西。 Wireshark一直在看到每秒160个数据包到达......

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


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

DatagramSocket

Wireshark尽职尽责地指出它正在全部接收 - 但是我的客户端仍然没有,即使明确设置了接收IP:

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.
    }
}

一些奇怪我刚才注意到,虽然,当我检查其InetAddress inAddr = InetAddress.getByName( "192.178.178.0" ); DatagramSocket socket = new DatagramSocket( 50000, inAddr ); ... socket.receive( packet ); 被用于发送和接收,爪哇报告回正确的(“拥有” 192.178.178.0一) - 但Wireshark的只看到我的测试不同网络设备上的服务器数据包。关于发生了什么的任何想法?

1 个答案:

答案 0 :(得分:0)

好的,这很令人尴尬。我关闭了私有和工作网络的Windows防火墙 - 但事实证明,Windows被认为是我实际需要成为公共网络的那个......

现在工作正常。我考虑过删除这个问题,但希望它能帮助其他一些布偶。