繁体   English   中英

Java UDP DatagramSocket不接收DatagramPacket

[英]Java UDP DatagramSocket does not receive DatagramPacket

我在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数据包

在我的服务器应用程序中,我正在尝试接收此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 message received

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

我很确定这段代码在几个月前就已经运行了,而且我之间并没有这么做。

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

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

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

重置iptables规则后 ,Android App现在可以再次与我的服务器应用程序通信。

感谢您的输入!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM