无法接收DatagramPackets

时间:2012-12-31 10:16:40

标签: java udp packet datagram

我无法收到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吗?)。

我真的很感激任何建议!

3 个答案:

答案 0 :(得分:1)

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

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

来自doc:

  

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

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

答案 1 :(得分:0)

如果192.168.1.1是路由器,那么这些数据包可能不是来自那里,所以你不应该连接它。实际上你根本不需要调用connect(),除非你需要过滤掉其他来源的数据包。或者连接到数据包的实际源地址。

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

答案 2 :(得分:0)

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