尽管我知道我的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的只看到我的测试不同网络设备上的服务器数据包。关于发生了什么的任何想法?
答案 0 :(得分:0)
好的,这很令人尴尬。我关闭了私有和工作网络的Windows防火墙 - 但事实证明,Windows被认为是我实际需要成为公共网络的那个......
现在工作正常。我考虑过删除这个问题,但希望它能帮助其他一些布偶。