我无法收到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吗?)。
我真的很感激任何建议!
答案 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。现在我可以收到它们了!