簡體   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