1

我无法收到DatagramPackets。但是,使用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?)。

我真的很感激任何建议!

4

3 回答 3

1

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

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

从文档:

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

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

于 2012-12-31T10:47:14.747 回答
0

解决了!问题不在于DatagramSocket:我需要接收的数据包被发送到某个奇怪的地址(不是我的 PC)。由于我想要接收的数据包是 AR.Drone,我终于设法告诉它应该将数据包发送到我的 PC。现在我可以收到它们了!

于 2012-12-31T20:14:10.173 回答
0

如果 192.168.1.1 是路由器,则数据包可能不是来自那里,因此您不应该连接到它。实际上,您根本不需要调用 connect() ,除非您需要过滤掉来自其他来源的数据包。否则连接到数据包的实际源地址。

不,DatagramSocket 不限于从其他 DatagramSocket 接收。

于 2012-12-31T11:22:39.897 回答