gpt4 book ai didi

Java UDP DatagramSocket 未收到 DatagramPacket

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:17 24 4
gpt4 key购买 nike

我在 Java 中使用 UDP 时遇到了一个奇怪的问题。设置:我的 Android 设备正在初始化通信,它是通过 Wifi 连接的。我的计算机运行一个用 Java (JRE: 1.8) 编写的服务器,并通过以太网连接。

我正在从 Android 设备向我的计算机发送 UDP 数据包:

address = InetAddress.getByName("192.168.178.57");
packet = new DatagramPacket(data, data.length, address, 61010);
socket.send(packet);

发送数据包时没有抛出异常。在我的计算机上打开 Wireshark,我可以看到正在接收 UDP 数据包:

Wireshark: UDP packet received

在我的服务器应用程序中,我尝试接收此 UDP 数据包:

address = InetAddress.getByName("192.168.178.57");
socket = new DatagramSocket(61010, address);
byte[] receiveBuffer = new byte[4096];
System.out.println("listening on " + socket.getLocalAddress().getHostAddress() + ":" + socket.getLocalPort() + "...");
// => listening on 192.168.178.57:61010...

packet = new DatagramPacket(receiveBuffer, receiveBuffer.length);
socket.receive(packet);
System.out.println("UDP message received");

但是,它没有被接收:接收到的UDP消息永远不会被打印。

[编辑]
防火墙配置为允许数据包 (ufw allowed 61010/udp)。 Java 中没有安全管理器会丢弃数据包(System.getSecurityManager()null)。但是,如果我通过服务器应用程序而不是 Android 设备发送 UDP 数据包,则会收到该数据包。
[/编辑]

我非常确定这段代码在几个月前就可以工作,并且在这期间我没有对其进行处理。

我缺少什么,有什么想法吗?

最佳答案

感谢@John Bollinger,我对防火墙设置进行了第二次和第三次查看。事实上,防火墙导致了这个问题。

通过ufw allow <port>/udp明确允许特定端口显然不足以绕过任何阻止外部 UDP 数据包的规则。

resetting the iptables rules之后Android 应用程序现在能够再次与我的服务器应用程序通信。

感谢您的意见!

关于Java UDP DatagramSocket 未收到 DatagramPacket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38150857/

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