1

マルチキャスト リスナーがグループに参加するときに、ルーターがダウンしている可能性があるというシナリオがあります。そのシナリオでは、マルチキャスト メッセージがリスナーに到達することはありません。

そのため、リスナーをタイムアウトさせてから、マルチキャスト グループに再度参加させる予定です。

問題は、次のコードでは、リスナーがマルチキャスト メッセージを正常に登録および受信することを保証しないことです。

  final MulticastSocket mcSocket = new MulticastSocket(POR); 

  // Join group before router started
  mcSocket.joingGroup(mcAddress);

  // wait until router starts
  Thread.sleep(LONG_TIME);

  mcSocket.leaveGroup(mcAddress);

  // Join group after router started.
  // Expected that this would re-register listener with router, but it doesn't
  mcSocket.joingGroup(mcAddress);

  // packet is never received
  mcSocket.receive(packet);

では、リスナーがルーターに再登録されるようにするには、どうすればよいでしょうか?

4

1 に答える 1

1

別の戦略を試してみます。で長めの読み取りタイムアウトを設定し、setSoTimeout()期限が切れた場合はグループを離れ、少しスリープしてから再び参加します。そうすれば、起動時だけでなく、毎回発生します。再参加を行うときに IGMP JOIN メッセージが実際に発信されていることを確認するために、おそらくネットワークをスニッフィングする必要があります。

于 2014-06-16T06:32:28.070 に答える