2014-12-01 161 views
0

我試圖在Android上設置廣播或多播服務器,同時它充當熱點。在廣播出現一些初始問題(接收網絡不可達錯誤)後,我發現這對於Android來說是正常的,所以我選擇通過多播來實現它,因爲無論如何我們都認爲這是最好的。當我這樣做,我收到以下錯誤:當在Android中進行網絡共享時,網絡接口沒有地址

W/System.err(13578): java.net.SocketException: No address associated with interface: [wlan0][21] 

我明白這意味着什麼,但是當我檢查的接口,而我的熱點亞行殼牌使用netcfg命令有效時,我看到以下內容:

wlan0 UP 192.168.43.1/24 0x00001043 02:1a:11:f0:3d:80 

所以我不明白爲什麼在運行時我得到一個沒有地址關聯的異常,但shell命令顯示一個,除非它是因爲Android試圖阻止我以某種方式。任何幫助瞭解正在發生的事情以及我如何在這個界面上成功打開多播套接字將會很好。我試圖打開它如下:

// Create the multicast socket 
final MulticastSocket socket = new MulticastSocket(0); 
Log.d(TAG, "Joining multicast group: 224.0.0.30"); 
final SocketAddress address = new InetSocketAddress(InetAddress.getByName("224.0.0.30"), socket.getLocalPort()); 
socket.joinGroup(address, NetworkInterface.getByName("wlan0")); 
Log.d(TAG, "Multicast socket using interface: " + socket.getNetworkInterface()); 

回答

0

原來這是由競爭條件造成的,這在我想到它之後是非常有意義的。 Android需要一段時間才能更新sys/class/net中的文件。我的解決方案是反覆輪詢直到它返回一個地址,然後繼續。