MulticastSocket で joinGroup(addr) を呼び出そうとすると、SocketException が発生します。これは、マシンの起動時にアプリケーションを自動起動するようにセットアップした Windows マシンでのみ発生します。
Windows が起動プロセスを完全に終了していないため、例外がスローされたようです。ここに例外があります。
java.net.SocketException: error setting options
at java.net.PlainDatagramSocketImpl.join(Native Method)
at java.net.PlainDatagramSocketImpl.join(Unknown Source)
at java.net.MulticastSocket.joinGroup(Unknown Source)
アプリの起動時に、グループに参加する前に 1 分待つと、すべてが正常に機能します。
そのため、ネットワークが利用可能になるとすぐに接続されるように、再試行ループを配置することにしました。2 回失敗した後、グループへの参加の 3 回目の試行が機能します。
問題は、MulticastSocket が正常に参加したにもかかわらず、グループからメッセージを受信しないことです。
失敗するたびに新しい MulticastSocket を作成し、古いものを破棄しています。
1 つの MulticastSocket でグループに参加できないと、エラーなしで参加したグループに影響するのはなぜですか? また、どうすればこれを回避できますか?