私は、マルチキャスト経由で受信したパケットをリッスンして応答するサービスを Android に持っています。
これはほとんどの場合機能しますが、残念ながら、時々パケットの受信が停止することがわかりました。MulticastSocket.receive() の呼び出しでスレッドはブロックされたままになりますが、何も出てきません。私はゆっくりとこれを引き起こす原因を突き止めようとしており、ワイヤレスをオフにしてから再度オンにするか、ワイヤレス接続を変更することでそれが行われることを発見しました.
パケットを正常にリッスンし続けるには、MulticastSocket を閉じて再作成する必要があります。しかし、私はこれを行う方法を見つけていません --- 何かが起こったという通知を受け取っていないようです: インテントも Java 例外も何もありません。ソケットが無効になった場合、受信が IOException をスローすると予想されますが、これは発生していないようです。
(a)実際に何が起こっているのか、(b)それを回避する方法について、誰かが洞察を提供できますか?今のところ、私の最善の推測は、10 秒ごとにソケットを継続的に破棄して再作成することですが、それはただの悪です。