2011-06-08 79 views
0

我在將一個Android手機的數據報包廣播到下一個時遇到了問題。通過DatagramSocket進行廣播的問題

我已經設置我的應用程序能夠使用2個不同的數據報套接字。這一切運行良好,我可以在插槽之間切換。

我使用2部電話測試應用程序,以及能夠與我的應用程序通信的基於PC的應用程序。當我嘗試從兩部手機中的一部手機廣播數據包時,PC應用程序反應良好,但另一部手機根本沒有響應。當我使用其他手機進行嘗試時也會發生同樣的情況。

但這裏有一個問題:每當我嘗試從基於PC的應用程序進行廣播時,兩部手機都會響應。 (???)

設備和PC應用程序都設置爲使用相同的廣播地址進行發送。然而,手機似乎並不接受對方的廣播。我已經確認他們在廣播時確實收到廣播迴應,這顯然是正確的。

我用來初始化和更新廣播套接字的方法如下所述。

private void initBroadcastSocket(Inet4Address address, int port){ 
    try { 
     mBroadcastSocket = new DatagramSocket(port, address); 
     mBroadcastSocket.setBroadcast(true); 
     mBroadcastSocket.setSoTimeout(SOCKET_TIME_OUT); 
    } catch (IOException ioe) { 
     Log.e(TAG, "Exception occurred while initializing BroadcastSocket: " + ioe.toString()); 
    } 
    if(mBroadcastSocket != null){ 
     Log.d(TAG, "BroadcastSocket initially set to " + mBroadcastSocket.getLocalAddress() + 
        ":" + mBroadcastSocket.getLocalPort()); 
    } 
} 

public synchronized void updateBroadcastSocket(Inet4Address address, int port){ 
    // Temporarily suspend the listening Thread. 
    ... 
    // If the socket is open, close it. 
    if(mBroadcastSocket != null){ 
     mBroadcastSocket.close(); 
     mBroadcastSocket = null; 
    } 
    // Create new socket with the passed values. 
    try { 
     mBroadcastSocket = new DatagramSocket(port, address); 
     mBroadcastSocket.setBroadcast(true); 
     mBroadcastSocket.setSoTimeout(SOCKET_TIME_OUT); 
    } catch (SocketException se) { 
     Log.e(TAG, "Exception occured while updating BroadcastSocket: " + se.toString()); 
    } 
    // Log new address and port. 
    ... 
    // Continue the listening Thread. 
    ... 
} 

如果有人在我的代碼中發現缺陷,請詳細說明。

回答

0

問題是Android設備都有相同的IP地址(不知何故)。我正試圖解決這個問題。