3

私は、マルチキャスト経由で受信したパケットをリッスンして応答するサービスを Android に持っています。

これはほとんどの場合機能しますが、残念ながら、時々パケットの受信が停止することがわかりました。MulticastSocket.receive() の呼び出しでスレッドはブロックされたままになりますが、何も出てきません。私はゆっくりとこれを引き起こす原因を突き止めようとしており、ワイヤレスをオフにしてから再度オンにするか、ワイヤレス接続を変更することでそれが行われることを発見しました.

パケットを正常にリッスンし続けるには、MulticastSocket を閉じて再作成する必要があります。しかし、私はこれを行う方法を見つけていません --- 何かが起こったという通知を受け取っていないようです: インテントも Java 例外も何もありません。ソケットが無効になった場合、受信が IOException をスローすると予想されますが、これは発生していないようです。

(a)実際に何が起こっているのか、(b)それを回避する方法について、誰かが洞察を提供できますか?今のところ、私の最善の推測は、10 秒ごとにソケットを継続的に破棄して再作成することですが、それはただの悪です。

4

2 に答える 2

3

注: この回答は、2010 年に質問された時点では意味のあるものでしたが、今日ではおそらく無関係です。

ワイヤレスネットワークを変更することは、ネットワークを無効にしてから再度有効にすることにほとんど似ていると思います (おそらく別の IP とルーティングを使用)。

おそらく、ネットワーク情報の変更を登録すると、必要な警告が表示されるでしょうか?

http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION

および関連ページ

于 2010-10-23T01:56:05.020 に答える
2

マルチキャストロックを取得していますか?

WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
MulticastLock lock = manager.createMulticastLock("lock name");
lock.setReferenceCounted(true);
lock.acquire();

また、特定のデバイスがマルチキャストをブロックしているようです。

Android2.2でのマルチキャスト

于 2010-10-22T15:23:24.440 に答える