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.
...
}
如果有人在我的代碼中發現缺陷,請詳細說明。