3

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 でグループに参加できないと、エラーなしで参加したグループに影響するのはなぜですか? また、どうすればこれを回避できますか?

4

2 に答える 2

1

私はこれが古いことを知っていますが、確かなマルチキャストの回答はまれなようです。

私はあなたがより良いと思う:

final InetAddress localHost = InetAddress.getLocalHost();
final NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);

これはより簡潔であり、実際にマルチキャスト メッセージを受信する NIC を確実に取得するためです。

于 2014-06-19T14:01:39.227 に答える