ある Android フォンから次の Android フォンへのデータグラム パケットのブロードキャストに問題があります。
2 つの異なるデータグラム ソケットを使用できるようにアプリケーションをセットアップしました。これはすべてうまく機能し、ソケットをうまく切り替えることができます。
アプリケーションと通信できる PC ベースのアプリケーションと同様に、2 台の電話を使用してアプリケーションをテストします。2 台の電話のうちの 1 台からデータグラム パケットをブロードキャストしようとすると、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.
...
}
誰かが私のコードに欠陥を見つけた場合は、詳しく教えてください。