我做了一个小工具来接收/发送某些UDP数据包。 它在我的家庭网络中没有问题,无论数据包来自这台PC,我的Android手机还是网络中的其他PC。 但是,如果我尝试在网络中使用它,它应该被使用,接收部分就会停止工作。
防火墙不是问题,因为我在Wireshark中看到收到的UDP数据包。 以下是问题的代码部分(如果它是由代码引起的):
static byte[] buffer = new byte[16];
..... //more code + sending part of the program
while (true){
DatagramPacket receivePacket = new DatagramPacket(buffer, buffer.length);
//"buffer"
serverSocket.receive(receivePacket);
System.out.println("Packet received!");
// Convert the contents to a string, and display them
String msg = new String(buffer, 0, receivePacket.getLength());
System.out.println(receivePacket.getAddress().getHostName() + ": "
+ msg);
// Reset the length of the packet before reusing it.
receivePacket.setLength(buffer.length);
//irrelevant stuff....
....
}
如果我在家庭网络中运行程序并从任何地方向我的PC发送数据包,我会得到此输出:
“192.168.0.XXX:ContentsOfThePacket”,我可以使用msg字符串。
但是在其他网络中,当到达serverSocket.receive(receivePacket);
时没有任何反应,即使pc上接收到与家庭网络上相同的数据包(通过wireshark确认),所以它似乎不是由在那里设置的防火墙。
此外,整个“向网络中的某台PC发送数据包”部分正在完美运行......
编辑:我现在也在我的笔记本上运行程序,它没有问题,无论是谁发送数据包(其他电脑,手机),也无论我使用哪个接口连接到网络(usb-ethernet适配器)或者wlan)(在家庭网络中再次),但是对于笔记本电脑,它也不适用于其他网络
答案 0 :(得分:0)
没有机会给你一个解决方案(猜测),但我建议通过netcat测试这个场景来隔离问题(如果你在unix上或者有cygwin可用)。 Netcat具有UDP模式(-u开关)。如果您可以使用netcat传输数据,那么它就是您的程序。如果失败,则无需进一步调试。
接收方:
nc -u -p <port>
在发送方:
echo "Hello" | nc -u <host> <port>