14

マルチキャスト パケットをリッスンして通信するクライアントを「検出」するプロトタイプの Android アプリがあります。ソケットのセットアップは次のようになります。

InetAddress group = InetAddress.getByName("228.1.2.3");
MulticastSocket s = new MulticastSocket(4000);
s.joinGroup(group);

これは、すべてのデバイスが WiFi 経由で接続されている場合に非常にうまく機能します。ポータブル ホットスポットとして機能する電話でこれをサポートしたいと思います。ただし、すべてのデバイスがホットスポットに正しく接続しているように見えますが、マルチキャスト データを受信しなくなりました。ホットスポット モードでこのタイプの通信を禁止する制限があるかどうか、またはこれを有効にするために必要な追加のネットワーク構成があるかどうか疑問に思っています。Gingerbread と Froyo を実行しているいくつかの異なるデバイスでこれを試しましたが、うまくいきませんでした。

4

3 に答える 3

3

この記事が示すように: https://plus.google.com/+Chainfire/posts/9NMemrKYnCd

MulticastSocket::setNetworkInterface()

答えだろう

wlan0 eth は次の方法で見つけることができます。

public static NetworkInterface getWlanEth() {
    Enumeration<NetworkInterface> enumeration = null;
    try {
        enumeration = NetworkInterface.getNetworkInterfaces();
    } catch (SocketException e) {
        e.printStackTrace();
    }
    NetworkInterface wlan0 = null;
    StringBuilder sb = new StringBuilder();
    while (enumeration.hasMoreElements()) {
        wlan0 = enumeration.nextElement();
        sb.append(wlan0.getName() + " ");
        if (wlan0.getName().equals("wlan0")) {
            //there is probably a better way to find ethernet interface
            Log.i(TAG, "wlan0 found");
            return wlan0;
        }
    }

    return null;
}

ホットスポットモードで動作するかどうかを試してみてください...

于 2014-12-30T03:51:05.620 に答える
0

マニフェストのアクセス許可があり、ロックを作成していますか?

許可については、http://developer.android.com/reference/android/Manifest.permission.html の「CHANGE_WIFI_MULTICAST_STATE」を参照してください

また、マルチキャスト ロックを作成するには... http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.htmlを参照してください。

于 2012-03-23T14:32:31.597 に答える