gpt4 book ai didi

java - DatagramSocket 从不接收

转载 作者:行者123 更新时间:2023-11-29 09:08:03 26 4
gpt4 key购买 nike

尽管我知道我的 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只能在不同的网络设备上看到我的测试服务器数据包。对正在发生的事情有什么想法吗?

最佳答案

好吧,这很尴尬。我为私有(private)和工作网络关闭了 Windows 防火墙 - 但事实证明 Windows 认为我实际上需要的是一个公共(public)网络...

现在可以正常使用了。我考虑过删除这个问题,但希望它能对其他布偶有所帮助。

关于java - DatagramSocket 从不接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13816890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com