Интерфейс 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. Если сокет привязан к конкретному адресу, а не к универсальному, то зависит от реализации, будут ли многоадресные датаграммы получены сокетом.Параметр
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- Если произошла ошибка ввода-вывода
join
MembershipKey join(InetAddress group, NetworkInterface interf, InetAddress source) throws IOException
Если этот канал в данный момент является членом группы на заданном интерфейсе для получения дейтаграмм от заданного адреса источника, то возвращается ключ членства, представляющий это членство. В противном случае этот канал присоединяется к группе, и возвращается полученный новый ключ членства. Полученный ключ членства source-specific.
Членство кумулятивное, и этот метод может быть вызван снова с той же группой и интерфейсом для получения дейтаграмм, отправленных другими адресами источника в группу.
- Параметры:
-
group- Мультипоточный адрес для подключения -
interf- Сеть интерфейса, на котором присоединиться к группе -
source- Адрес источника - Возвращает:
- Ключ членства
- Исключение:
-
IllegalArgumentException- Если параметр группы не являетсяmulticastадресом, параметр source не является одноадресным адресом, тип параметра группы не поддерживается этим каналом или параметр source не имеет того же типа адреса, что и группа -
IllegalStateException- Если канал в данный момент является членом группы на заданном интерфейсе для приема всех дейтаграмм -
UnsupportedOperationException- Если сокет канала не является сокетом протокола Интернета, или фильтрация источников не поддерживается, или платформа не поддерживает мультипотоковые каналы -
ClosedChannelException- Если этот канал закрыт -
IOException- Если произошла ошибка ввода-вывода
© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/channels/MulticastChannel.html