你好我做了一个简单的代码来测试我正在做的程序。
代码在这里:
。 。
public static final byte precond[] = {(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF};
public static final byte aftercond[] = {(byte) 0x0a,(byte) 0x00};
String msg = new String(precond) + "challenge rcon" + new String(aftercond);
String aux = "";
//Enviar
DatagramSocket sc2 = new DatagramSocket(27020);
//sc2.setSoTimeout(5000);
DatagramPacket pkt = new DatagramPacket(msg.getBytes(),msg.length(),InetAddress.getByName("82.102.15.70"),27050);
sc2.send(pkt);
System.out.println("SENT");
//Receber
DatagramPacket pkt2 = new DatagramPacket(new byte[1024],1024);
sc2.receive(pkt2);
String recived = new String(pkt2.getData(),0,pkt2.getLength());
aux = recived.split(" ")[2].trim();
sc2.close();
System.out.println("RECIVED - " + aux);
。 。
这是一个简单的代码,只有它认为将udp数据包发送到服务器并且服务器才会响应。
问题是,这项工作是在Windows上,但它不适用于ubuntu(服务器/桌面版,我不在linux中说,因为我没有尝试过另一个版本)。
我已经检查了IPtables与路由器相关的一切,但是我无法解决这个问题,代码运行到第一个System.out然后阻塞等待响应,但是ubuntu上的响应从未到达:S
有人可以帮忙吗?
已在其他服务器(VPS)中尝试过,但问题仍然存在。
第1个数据包发送时出现问题!
linux screen:http://img853.imageshack.us/f/linuxr.png
答案 0 :(得分:1)
我怀疑这是“默认”IP地址的区别。
您没有绑定到特定的IP地址,而是发送到计算机的公共IP。
我猜你在linux中调用127.0.0.1
DatagramSocket sc2 = new DatagramSocket(27020);
尝试:
DatagramSocket sc2 =
new DatagramSocket(27020, InetAddress.getByName("<my public IP here>"));
答案 1 :(得分:1)
可能是由于网络接口是否配置为混杂。我有一些模糊的回忆,在linux中,网络接口通常不配置为混杂。如果网络接口没有配置为混杂,它将不会收到自己的udp数据包。
答案 2 :(得分:0)
使用Wireshark检查在线路上发送和接收的实际的内容。这应该给你更多关于在哪里看的指示。