你好,我做了一個簡單的代碼來測試我正在做的程序。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
DatagramScoket的第二個參數不應該是本地IP而是目的IP(82.102.15.70)? – Frielspak 2011-04-30 17:10:08
是的......我可能讀過這個錯誤,我認爲他發送/接收的是相同的代碼。編輯...應該更有意義無論如何。 – 2011-04-30 17:11:49
好吧,我會試試看。在netstat中顯示的是:udp6 0 0 r1do.csrcon.info:27020 [::]:* - 如果我通過參數傳遞公共IP,它仍然不起作用:S – Frielspak 2011-04-30 17:22:08