Java UDP DatagramSocket不接收DatagramPacket

时间:2016-07-01 17:19:21

标签: java android networking udp

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

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

standalone.bat -bmanagement  sbstjwsvm1509 -b sbstjwsvm1509 -c standalone-full-ha.xml

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

Wireshark: UDP packet received

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

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

但是,未收到: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)。 Java中没有安全管理器会丢弃数据包(ufw allow 61010/udpSystem.getSecurityManager())。但是如果我通过服务器应用程序而不是Android设备发送UDP数据包,则会收到它 的 [/编辑]

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

感谢您的投入!