JAVA - 在Linux上接收UDP数据包时出现问题

时间:2011-04-30 16:41:14

标签: java linux ubuntu udp

你好我做了一个简单的代码来测试我正在做的程序。

代码在这里:

。 。

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

Windows屏幕:http://img339.imageshack.us/f/windowsep.png

3 个答案:

答案 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检查在线路上发送和接收的实际的内容。这应该给你更多关于在哪里看的指示。