Интерфейс MulticastChannel
- Все суперинтерфейсы:
-
AutoCloseable,Channel,Closeable,NetworkChannel
- Все известные реализующие классы:
DatagramChannel
public interface MulticastChannel extends NetworkChannel
Многоадресная рассылка IP — это передача пакетов IP членам группы, состоящей из нуля или более хостов, идентифицированных по одному целевому адресу.
В случае канала на сокет IPv4, базовая операционная система необязательно поддерживает RFC 2236: Протокол управления группами в Интернете, версия 2 (IGMPv2). Если IGMPv2 поддерживается, то операционная система может дополнительно поддерживать фильтрацию источников, как указано в RFC 3376: Протокол управления группами в Интернете, версия 3 (IGMPv3). Для каналов на сокет IPv6 соответствующими стандартами являются RFC 2710: Многоадресное обнаружение слушателей (MLD) для IPv6 и RFC 3810: Многоадресное обнаружение слушателей версия 2 (MLDv2) для IPv6.
Метод join(InetAddress,NetworkInterface) используется для присоединения к группе и получения всех многоадресных пакетов, отправленных в группу. Канал может присоединяться к нескольким многоадресным группам и может присоединяться к одной и той же группе по нескольким interfaces. Принадлежность отменяется вызовом метода drop на возвращенном объекте MembershipKey. Если базовая платформа поддерживает фильтрацию источников, то можно использовать методы block и unblock для блокировки или разблокировки многоадресных пакетов от определенных адресов источников.
Метод join(InetAddress,NetworkInterface,InetAddress) используется для начала приема пакетов, отправленных в группу, адрес источника которой соответствует заданному адресу источника. Этот метод выбрасывает UnsupportedOperationException, если базовая платформа не поддерживает фильтрацию источников. Принадлежность кумулятивна, и этот метод можно вызывать повторно с той же группой и интерфейсом для получения пакетов от других адресов источников. Метод возвращает объект MembershipKey, представляющий принадлежность к получению пакетов от заданного адреса источника. Вызов метода drop ключа отменяет принадлежность, чтобы пакеты от адреса источника больше не принимались.
Зависимости от платформы
Реализация многоадресной рассылки предназначена для прямого отображения на собственные средства многоадресной рассылки. Следовательно, при разработке приложения, которое получает многоадресные пакеты IP, следует учитывать следующие моменты:При создании канала необходимо указать
ProtocolFamily, который соответствует типу адреса многоадресных групп, к которым будет присоединяться канал. Нет гарантии, что канал на сокет одной семейства протоколов может присоединяться и получать многоадресные пакеты, когда адрес многоадресной группы соответствует другой семействе протоколов. Например, если канал на сокетIPv6может присоединиться к многоадресной группеIPv4и получить многоадресные пакеты, отправленные в группу, зависит от реализации.Сокет канала должен быть привязан к адресу
wildcard. Если сокет привязан к определенному адресу, а не к адреса wildcard, то получение многоадресных пакетов сокетом зависит от реализации.Параметр
SO_REUSEADDRдолжен быть включен доbindingсокета. Это необходимо, чтобы разрешить нескольким членам группы привязку к одному и тому же адресу.
Пример использования:
// join multicast group on this interface, and also use this
// interface for outgoing multicast datagrams
NetworkInterface ni = NetworkInterface.getByName("hme0");
DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)
.setOption(StandardSocketOptions.SO_REUSEADDR, true)
.bind(new InetSocketAddress(5000))
.setOption(StandardSocketOptions.IP_MULTICAST_IF, ni);
InetAddress group = InetAddress.getByName("225.4.5.6");
MembershipKey key = dc.join(group, ni);
- С:
- 1.7
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Закрывает этот канал. |
MembershipKey |
join |
Подключается к многоадресной группе для начала приема всех пакетов, отправленных в группу, возвращая ключ членства. |
MembershipKey |
join |
Подключается к многоадресной группе для начала приема пакетов, отправленных в группу, с указанным адресом источника. |
Методы, объявленные в интерфейсе java.nio.channels.NetworkChannel
bind, getLocalAddress, getOption, setOption, supportedOptions
Подробное описание методов
close
void close() throws IOException
Если канал является членом мультивещательной группы, то членство dropped. По возвращении, membership-key будет invalid.
В противном случае этот метод ведет себя точно так же, как указано в интерфейсе Channel.
- Определено в:
-
closeв интерфейсеAutoCloseable - Определено в:
-
closeв интерфейсеChannel - Определено в:
-
closeв интерфейсеCloseable - Исключение:
-
IOException- Если произошла ошибка ввода-вывода
join
MembershipKey join(InetAddress group, NetworkInterface interf) throws IOException
Если этот канал в настоящее время является членом группы на заданном интерфейсе для приема всех дейтаграмм, то возвращается ключ членства, представляющий это членство. В противном случае этот канал присоединяется к группе, и возвращается полученный новый ключ членства. Полученный ключ членства не source-specific.
Мультивещательный канал может присоединяться к нескольким мультивещательным группам, включая одну и ту же группу на нескольких интерфейсах. Реализация может установить ограничение на количество групп, к которым можно присоединиться одновременно.
- Параметры:
-
group- Мультивещательный адрес для подключения -
interf- Сетевой интерфейс, на котором необходимо присоединиться к группе - Возвращает:
- Ключ членства
- Исключение:
-
IllegalArgumentException- Если параметр группы не являетсяmulticastадресом, или параметр группы имеет тип адреса, который не поддерживается этим каналом -
IllegalStateException- Если канал уже имеет членство с указанием источника в группе на данном интерфейсе -
UnsupportedOperationException- Если сокет канала не является сокетом протокола Интернета или платформа не поддерживает мультивещание -
ClosedChannelException- Если этот канал закрыт -
IOException- Если произошла ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности и его методcheckMulticastзапрещает доступ к мультивещательной группе
join
MembershipKey join(InetAddress group, NetworkInterface interf, InetAddress source) throws IOException
Если этот канал в настоящее время является членом группы на заданном интерфейсе для приема дейтаграмм от заданного адреса источника, то возвращается ключ членства, представляющий это членство. В противном случае этот канал присоединяется к группе, и возвращается полученный новый ключ членства. Полученный ключ членства source-specific.
Членство кумулятивное, и этот метод может быть вызван повторно с той же группой и интерфейсом для приема дейтаграмм, отправленных другими адресами источника в группу.
- Параметры:
-
group- Мультивещательный адрес для подключения -
interf- Сетевой интерфейс, на котором необходимо присоединиться к группе -
source- Адрес источника - Возвращает:
- Ключ членства
- Исключение:
-
IllegalArgumentException- Если параметр группы не являетсяmulticastадресом, параметр source не является одноадресным адресом, параметр группы имеет тип адреса, который не поддерживается этим каналом, или параметр source не является таким же типом адреса, как группа -
IllegalStateException- Если канал в настоящее время является членом группы на заданном интерфейсе для приема всех дейтаграмм -
UnsupportedOperationException- Если сокет канала не является сокетом протокола Интернета, или фильтрация источника не поддерживается, или платформа не поддерживает мультивещание -
ClosedChannelException- Если этот канал закрыт -
IOException- Если произошла ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности и его методcheckMulticastзапрещает доступ к мультивещательной группе
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/channels/MulticastChannel.html