我遇到从一部Android手机向下一部手机广播数据报包的问题。
我已将我的应用程序设置为能够使用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 :(得分:0)
问题是Android设备都具有相同的IP地址(不知何故)。我现在正试着解决这个问题。