JAVA - проблема получения пакетов UDP в Linux - PullRequest
0 голосов
/ 30 апреля 2011

Здравствуйте, я сделал простой код для тестирования программы, которую я делал.

Код здесь:

. , .

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 все, что связано с маршрутизатором, но я не могу решить это, код выполняется до 1-го System.out, затем он ожидает ответа, но ответ на Ubuntu так и не пришел: S

Может кто-нибудь помочь, пожалуйста?

Уже пробовал на другом сервере (VPS) и это все та же проблема.

Проблема в отправке 1-го пакета!

экран linux: http://img853.imageshack.us/f/linuxr.png

экран Windows: http://img339.imageshack.us/f/windowsep.png

Ответы [ 3 ]

1 голос
/ 30 апреля 2011

это может быть связано с тем, настроен ли сетевой интерфейс на случайный.У меня есть какое-то смутное воспоминание о том, что в Linux сетевые интерфейсы обычно не настраиваются на разнородность.если сетевой интерфейс не настроен на беспорядочную работу, он не будет получать свои собственные пакеты udp.

1 голос
/ 30 апреля 2011

Я подозреваю, что разница в IP-адресе по умолчанию.

Вы не привязываетесь к определенному IP-адресу, но отправляете на общедоступный IP-адрес устройства.

Я предполагаю, что в Linux вы получаете 127.0.0.1, когда звоните DatagramSocket sc2 = new DatagramSocket(27020);

Попробуйте:

DatagramSocket sc2 = 
    new DatagramSocket(27020, InetAddress.getByName("<my public IP here>"));
0 голосов
/ 30 апреля 2011

Проверьте, что на самом деле отправляется и принимается по кабелю с помощью Wireshark .Это должно дать вам больше указаний относительно того, где искать.

...