[英]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.