Java несколько многоадресных сокетов в одной группе на одном хосте и порте

Я использую многоадресную рассылку для реализации простого сервиса обнаружения. Несколько экземпляров приложения должны быть в состоянии работать на одном хосте, поэтому я получаю несколько многоадресных сокетов, которые являются членами одной группы на одном хосте.

В Linux это работает как положено. Каждый экземпляр приложения на хосте получает сообщения, отправленные на адрес многоадресной рассылки.

В Windows, однако, только первое приложение, присоединившееся к многоадресной группе, получает отправленные сообщения.

Вот код, который я использую для создания своего многоадресного сокета:

socket = new MulticastSocket(PORT);
InetAddress group = InetAddress.getByName(ADDRESS);
socket.joinGroup(group);
socket.setTimeToLive(TTL);

Есть ли какая-то опция, которую мне нужно установить? Я пытался обыскивать API, но ничего не могу найти.

РЕДАКТИРОВАТЬ: Согласно этому сайту, мне нужно установить SO_REUSEADDR, но это можно установить только до привязки сокета. Кажется, конструктор для MulticastSocket связывает сокет при создании.

1 ответ

Решение

Вы делаете это, создавая сокет без аргументов, а затем вызываете bind для этого объекта.

socket = new MulticastSocket();
socket.setReuseAddress(true);//redundant, already set with empty constructor
SocketAddress sockAddr = new InetSocketAddress(PORT);
socket.bind(sockAddr);
InetAddress group = InetAddress.getByName(ADDRESS);
socket.joinGroup(group);
socket.setTimeToLive(TTL);
Другие вопросы по тегам