0

ある 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.
    ...
}

誰かが私のコードに欠陥を見つけた場合は、詳しく教えてください。

4

1 に答える 1

0

問題は、両方の Android デバイスが (どういうわけか) 同じ IP アドレスを持っていることです。私は今これを修正しようとしています。

于 2011-06-08T13:14:56.623 に答える