Java: Как сделать многоадресный IP InetAddress эксклюзивным? - PullRequest
1 голос
/ 04 января 2012

Я пытаюсь сделать IP-адрес многоадресной рассылки эксклюзивным, т. Е. Его можно «заблокировать», а когда он «заблокирован», MulticastSocket больше не сможет присоединиться к нему.

Возможно ли это? Как мне это сделать? Вот некоторый код для объяснения моего случая:

String multicastIP = "224.0.0.1"; //multicast IP to "lock" later
InetAddress group = InetAddress.getByName(multicastIP); //create group

MulticastSocket multicastSocket = new MulticastSocket(8800); //Create a MulticastSocket using port 8800
multicastSocket.joinGroup(group); //join the group

//This is the part where I want to "lock" the group/IP

Дополнительная информация:

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

Было время, когда мы создали два сервера (которые имеют одинаковый IP-адрес многоадресной рассылки), и, между прочим, клиенты прослушивают оба сервера, получая сообщения от обоих серверов.

Мы хотим, чтобы клиенты слушали только свои серверы.

Спасибо! : D

1 Ответ

2 голосов
/ 04 января 2012

Multicast не сделает этого за вас.

Вам нужно будет проверить каждый входящий пакет , когда вы получите его , и сопоставить его с кортежем (source address, source port), с которого отправляет клиент.

Честно говоря, я не думаю, что есть много преимуществ для использования muticast для этого. Один из подходов, которые я видел, - это использовать многоадресную рассылку для обнаружения служб, а затем использовать одноадресную рассылку для «реального» протокола, как только вы его обнаружите.

Редактировать : для приложения локальной сети может быть допустима многоадресная рассылка. Я просто был бы осторожен, чтобы не транслировать слишком много. (многоадресные рассылки по сути являются широковещательными рассылками для большинства коммутаторов; они отфильтровываются сетевым адаптером, а не сетью). То есть в идеале следует убедиться, что именно сервер отправляет многоадресный трафик, а клиенты одноадресно обновляют сервер. (если каждый клиент многоадресной рассылки обновляет состояние, которое могут видеть все остальные клиенты, для чего нужен сервер?)

...