2011-09-09 217 views
0

我處於開發跨平臺UDP服務器客戶端的初期階段。在我的情況下,客戶端通過移動熱點選項向他們連接的Android手機發送廣播。Android 3G UDP廣播

我目前正在通過讓服務器和客戶端在同一設備上進行測試。但是,我只知道如何獲得廣播地址,這要感謝boxee遠程應用程序。

是否有人知道有一種方法可以像下面的代碼一樣執行,但要獲取移動網絡廣播地址?

所以,這裏是代碼:

InetAddress getBroadcastAdd(Context context) throws IOException { 
    WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    DhcpInfo dhcp = wifi.getDhcpInfo(); 

    int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask; 
    byte[] quads = new byte[4]; 
    for (int k = 0; k < 4; k++) 
     quads[k] = (byte) ((broadcast >> k * 8) & 0xFF); 
    return InetAddress.getByAddress(quads); 
} 

對於老鷹眼睛的讀者,你會聚集,我其實並不需要此代碼,該應用在其他設備的工作會得到一個廣播地址從wifi上,但我確實需要先對這個設備進行一些測試。

在此先感謝!

回答

0

大多數網絡(Wifi和3G)使用NAT。 NAT允許出站連接,但阻止入站(互聯網到設備)連接。

當你的服務器和設備都在同一個本地網絡(無線),那麼這是工作,因爲你沒有穿越NAT網關。

理由:您試圖做的事(從互聯網到設備的連接)在大多數網絡中都不起作用。

更新

如果你的設備均是同一個本地網絡上,那麼你可以使用的廣告/發現服務標準化的方式:卓悅又名零配置。還有的是,據報道,在Android上運行的Java實現:http://jmdns.sourceforge.net/

另見http://home.heeere.com/tech-androidjmdns.html

+0

我不需要上網,我想在Android設備作爲一個服務器,與其他設備連接到它,請求文件等等。 –

+0

正如我所說 - 你不能。 NAT防止啓動互聯網到設備的連接。 –

+0

只有兩臺設備位於同一本地(wifi)網絡上時,它纔會起作用。 –