2011-04-30 46 views
0

你好,我做了一個簡單的代碼來測試我正在做的程序。JAVA-在Linux上接收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(服務器/桌面版,IAM不在Linux中說,因爲我沒有在另一個destro嘗試)。

我已經選中的IPtables一切與路由器有關,但我解決不了這個,代碼運行,直到1日的System.out那麼塊的等待響應,但在Ubuntu響應未曾到達:S

能有人幫忙嗎?

已經嘗試在另一臺服務器(VPS),它仍然是同樣的問題。

問題出在第一個包發送!

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

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

回答

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>")); 
+0

DatagramScoket的第二個參數不應該是本地IP而是目的IP(82.102.15.70)? – Frielspak 2011-04-30 17:10:08

+0

是的......我可能讀過這個錯誤,我認爲他發送/接收的是相同的代碼。編輯...應該更有意義無論如何。 – 2011-04-30 17:11:49

+0

好吧,我會試試看。在netstat中顯示的是:udp6 0 0 r1do.csrcon.info:27020 [::]:* - 如果我通過參數傳遞公共IP,它仍然不起作用:S – Frielspak 2011-04-30 17:22:08

0

檢查什麼實際上發送與Wireshark線路上接收。這應該給你更多的指針,以及在哪裏尋找。

+0

已經做到了,但我使用tcpdump,因爲我的wireshark在ubuntu中找不到接口。 – Frielspak 2011-04-30 17:07:09

+0

Frielspak,如果它沒有找到接口,請確保以root身份運行Wireshark(即,使用'sudo')。這幾乎總是問題。 – 2011-04-30 19:05:24

+0

我現在有印刷品,而且我討厭什麼是問題。不同之處在於第一個數據包發送窗口中的字節與unix不同:| – Frielspak 2011-04-30 19:21:12

1

這可能是由於網絡接口是否配置爲混雜。我有一些模糊的回憶,在linux中,網絡接口通常不會被配置爲混雜。如果網絡接口未配置爲混雜,它將不會收到它自己的udp數據包。

+0

但我發送一個數據包給IP X,這個IP應該發回給我的數據包的響應 – Frielspak 2011-04-30 18:32:28