2011-06-08 50 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地址(不知何故)。我正试图解决这个问题。