マルチキャスト リスナーがグループに参加するときに、ルーターがダウンしている可能性があるというシナリオがあります。そのシナリオでは、マルチキャスト メッセージがリスナーに到達することはありません。
そのため、リスナーをタイムアウトさせてから、マルチキャスト グループに再度参加させる予定です。
問題は、次のコードでは、リスナーがマルチキャスト メッセージを正常に登録および受信することを保証しないことです。
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);
では、リスナーがルーターに再登録されるようにするには、どうすればよいでしょうか?