我无法收到DatagramPacket。使用wireshark,我可以验证数据包是否到达。我在此站点上看到了类似的问题以及可能的解决方案,但是它们对我没有太大帮助(我已经尝试停用防火墙等)。我的代码很简单:

// Create socket
DatagramSocket socket = new DatagramSocket(5554);
socket.connect(InetAddress.getByName("192.168.1.1"), 5554);

try {
    while(!stop) {
        keepAwake(); // This sends some bytes using socket.send(...), works perfectly fine
        DatagramPacket packet = new DatagramPacket(new byte[2048], 2048);
        socket.receive(packet); // Does not work :(
        System.out.println("[DEBUG] Packet received!"); // Never happens

        // Parse packet
    }
} catch (Exception e) {
    e.printStackTrace(); // Also no exceptions are thrown
}


这可能是什么问题?顺便说一句,我的操作系统是Ubuntu 12.10,数据包是从用C编写的服务器发送的,而我没有源代码(DatagramSocket是否只接收从Java DatagramSocket发送的DatagramPackets?)。

我真的很感谢任何建议!

最佳答案

尝试使用IP为0.0.0.0和所需端口而不是“ connect()”的bind()。

编辑:实际上,构造函数已经绑定了它,忽略连接就足够了。

从文档:


  当套接字连接到远程地址时,数据包只能发送到该地址或从该地址接收。


这可能就是为什么您没有收到数据包的原因。

07-25 21:00