簡體   English   中英

DatagramSocket廣播行為(Windows與Linux)

[英]DatagramSocket Broadcast Behavior (Windows vs. Linux)

背景故事:
我有一個無線設備,它會創建自己的SSID,使用自動IP為自己分配IP地址,然后開始將發現信息廣播到255.255.255.255。 (不幸的是,它不容易支持多播)

我正在嘗試做的是:
我需要能夠接收發現信息,然后將配置信息發送到設備。 問題在於,使用自動IP,在Windows等上,“ IP協商”過程可能要花費幾分鍾(在這段時間內,我可以看到廣播,甚至可以將廣播信息發送回設備)。

因此,我枚舉了所有連接的網絡接口(無法直接說出將用於與設備進行通信的接口),為它們的每個地址創建一個DatagramSocket,然后開始偵聽。 如果我通過特定的套接字接收發現信息,則知道可以使用同一套接字將數據發送回設備。 這適用於Windows。

問題:
在Linux和OSX上,以下代碼不接收廣播數據包:

byte[] addr = {(byte)169, (byte)254, (byte)6, (byte)215};  
DatagramSocket foo = new DatagramSocket(new InetSocketAddress(InetAddress.getByAddress(addr), PORT_NUM));  
while (true)  
{  
byte[] buf = new byte[256];  
DatagramPacket pct = new DatagramPacket(buf, buf.length);  
foo.receive(pct);  
System.out.println( IoBuffer.wrap(buf).getHexDump() );  
}

為了接收廣播數據包(在Linux / OSX上),我需要使用以下命令創建DatagramSocket:
DatagramSocket foo = new DatagramSocket(PORT_NUM);

但是,當我隨后使用此套接字將數據發送回設備時,數據包由OS路由(我假設),並且由於目標接口可能處於自動IP協商的中間,因此失敗。

有以下想法嗎?

  • 如何使“正常”的Windows行為在Linux / OSX上發生
  • 處理此過程的更好方法

提前致謝!

我認為這不是代碼的問題。 您是否檢查過OSX / Linux是否已正確通過防火牆允許這些地址/端口號? 我過去也有這個簡單的問題= P ..

僅供參考,有一種很好的技術,稱為零配置,旨在解決此問題。 這很容易學習,所以我建議您也去看看。

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM