繁体   English   中英

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

[英]JAVA - Problem receiving UDP Packets on Linux

您好,我编写了一个简单的代码来测试我正在做的程序。

代码在这里:

. . .

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 中说,因为我还没有尝试过另一个 detro)。

我已经检查了 IPtables 与路由器相关的所有内容,但我无法解决这个问题,代码运行到第一个 System.out 然后它阻塞等待响应,但 ubuntu 上的响应从未到达:S

有人可以帮忙吗?

已经在另一台服务器(VPS)上尝试过,但仍然是同样的问题。

问题在于第一个数据包发送!

linux 屏幕: http://img853.imageshack.us/f/linuxr.png

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

我怀疑这是“默认” IP 地址的区别。

您没有绑定到特定的 IP 地址,而是发送到机器的公共 IP 地址。

我猜在 linux 中,当您调用DatagramSocket sc2 = new DatagramSocket(27020);时,您会得到127.0.0.1

尝试:

DatagramSocket sc2 = 
    new DatagramSocket(27020, InetAddress.getByName("<my public IP here>"));

这可能是由于网络接口是否配置为混杂。 我有一些模糊的回忆,在 linux 中,网络接口通常不会配置为混杂。 如果网络接口未配置为混杂,它将不会收到自己的 udp 数据包。

使用Wireshark检查网络上实际发送和接收的内容。 这应该会给你更多关于在哪里看的指示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM