Интерфейс MulticastChannel
- Все суперинтерфейсы:
- AutoCloseable, Канал, Closeable, NetworkChannel
- Все известные реализующие классы:
- DatagramChannel
public interface MulticastChannel extends NetworkChannel
Сеть канал, поддерживающий многоадресную рассылку по протоколу Internet Protocol (IP).
Многоадресная рассылка IP — это передача IP-датаграмм членам группы, которая включает ноль или более хостов, идентифицируемых по одному адресу назначения.
В случае канала на сокет IPv4 операционная система поддерживает RFC 2236: Протокол управления группами в Интернете, версия 2 (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. Если сокет привязан к определённому адресу, а не к общему, то получение многоадресных датаграмм сокетом зависит от реализации.Опция
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(InetAddress group,
NetworkInterface interf) Присоединяется к многоадресной группе для начала получения всех датаграмм, отправленных в группу, возвращая ключ членства. |
MembershipKey |
join(InetAddress group,
NetworkInterface interf,
InetAddress source) Присоединяется к многоадресной группе для начала получения датаграмм, отправленных в группу от указанного адреса источника. |
Методы, унаследованные от интерфейса java.nio.channels.NetworkChannel
bind, getLocalAddress, getOption, setOption, supportedOptions Методы, унаследованные от интерфейса java.nio.channels.Канал
isOpen Методы
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- Если сокет канала не является сокетом Internet Protocol -
ClosedChannelException- Если данный канал закрыт -
IOException- Если произошла ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности, а его методcheckMulticastзапрещает доступ к многоадресной группе
join
MembershipKey join(InetAddress group,
NetworkInterface interf,
InetAddress source)
throws IOException Присоединяется к многоадресной группе для начала получения датаграмм, отправленных в группу от указанного адреса источника.
Если данный канал в настоящее время является членом группы на заданном интерфейсе для получения датаграмм от указанного адреса источника, то возвращается ключ членства, представляющий это членство. В противном случае этот канал присоединяется к группе, и возвращается полученный новый ключ членства. Полученный ключ членства имеет source-specific.
Членство кумулятивное, и этот метод можно вызывать снова с той же группой и интерфейсом, чтобы разрешить получение датаграмм, отправленных другими адресами источника в группу.
- Параметры:
-
group- Многоадресный адрес для присоединения -
interf- Сеть интерфейс, на котором присоединиться к группе -
source- Адрес источника - Возвращает:
- Ключ членства
- Выбрасывает:
-
IllegalArgumentException- Если параметр группы не являетсяmulticastадресом, параметр источника не является одноадресным адресом, тип адреса параметра группы не поддерживается данным каналом или параметр источника не является тем же типом адреса, что и группа -
IllegalStateException- Если канал в настоящее время является членом группы на заданном интерфейсе для получения всех датаграмм -
UnsupportedOperationException- Если сокет канала не является сокетом Internet Protocol или фильтрация источников не поддерживается -
ClosedChannelException- Если данный канал закрыт -
IOException- Если произошла ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности, а его методcheckMulticastзапрещает доступ к многоадресной группе
© 1993, 2020, 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.