Spec-Zone.ru › OpenJDK 24

Интерфейс MulticastChannel

Все суперинтерфейсы:
AutoCloseable, Channel, Closeable, NetworkChannel
Все известные реализующие классы:
DatagramChannel
public interface MulticastChannel extends NetworkChannel
Сеть-канал, поддерживающий многоадресную рассылку по протоколу Интернет (IP).

Многоадресная рассылка 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-многоадресные датаграммы, следует учитывать следующие моменты:
  1. Создание канала должно указывать ProtocolFamily, соответствующий типу адреса многоадресных групп, к которым присоединится канал. Нет гарантии, что канал к сокету в одной семействе протоколов может присоединиться и получать многоадресные датаграммы, когда адрес многоадресной группы соответствует другой семействе протоколов. Например, зависит от реализации, может ли канал к сокету IPv6 присоединиться к IPv4 многоадресной группе и получать многоадресные датаграммы, отправленные в группу.

  2. Сокет канала должен быть привязан к адресу wildcard. Если сокет привязан к конкретному адресу, а не к универсальному, то зависит от реализации, будут ли многоадресные датаграммы получены сокетом.

  3. Параметр 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
Внешние спецификации
  • RFC 2236: Протокол управления группами в Интернете, версия 2
  • RFC 2710: Открытие многоадресных подписчиков (MLD) для IPv6
  • RFC 3376: Протокол управления группами в Интернете, версия 3
  • RFC 3810: Открытие многоадресных подписчиков версии 2 (MLDv2) для IPv6

Краткое описание методов

Модификатор и тип Метод Описание
void close()
Закрывает этот канал.
MembershipKey join(InetAddress group, NetworkInterface interf)
Присоединяется к многоадресной группе для начала получения всех датаграмм, отправленных в группу, возвращая ключ членства.
MembershipKey join(InetAddress group, NetworkInterface interf, InetAddress source)
Присоединяется к многоадресной группе для начала получения датаграмм, отправленных в группу от заданного адреса источника.

Методы, объявленные в интерфейсе java.nio.channels.Channel

isOpen

Методы, объявленные в интерфейсе 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API