Интерфейс MulticastChannel

Все суперинтерфейсы:
AutoCloseable, Channel, Closeable, NetworkChannel
Все известные реализующие классы:
DatagramChannel
public interface MulticastChannel
extends NetworkChannel

Сеть канал, поддерживающий многоадресную рассылку протокола Internet Protocol (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

Методы

Модификатор и типМетодОписание
voidclose()

Закрывает этот канал.

MembershipKeyjoin​(InetAddress group, NetworkInterface interf)

Присоединяется к многоадресной группе для начала приема всех датаграмм, отправленных в группу, возвращая ключ членства.

MembershipKeyjoin​(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 - Если произошла ошибка ввода-вывода
SecurityException - Если установлен менеджер безопасности, и его метод checkMulticast запрещает доступ к многоадресной группе

join

MembershipKey join(InetAddress group,
                   NetworkInterface interf,
                   InetAddress source)
            throws IOException

Присоединяется к многоадресной группе, чтобы начать прием датаграмм, отправленных в группу от заданного адреса источника.

Если этот канал в данный момент является членом группы на заданном интерфейсе для приема датаграмм от указанного адреса источника, то возвращается ключ членства, представляющий это членство. В противном случае этот канал присоединяется к группе, и возвращается полученный новый ключ членства. Полученный ключ членства является source-specific.

Членство является кумулятивным, и этот метод можно вызывать снова с той же группой и интерфейсом, чтобы разрешить прием датаграмм, отправленных другими адресами источника в группу.

Параметры:
group - Многоадресной адрес для присоединения
interf - Сеть интерфейс, на котором следует присоединиться к группе
source - Адрес источника
Возвращает:
Ключ членства
Исключения:
IllegalArgumentException - Если параметр группы не является адресом multicast, параметр источника не является одноадресным адресом, параметр группы — это тип адреса, не поддерживаемый этим каналом, или параметр источника не имеет того же типа адреса, что и группа
IllegalStateException - Если канал в данный момент является членом группы на указанном интерфейсе для приема всех датаграмм
UnsupportedOperationException - Если сокет канала не является сокетом протокола Интернета, или фильтрация источника не поддерживается, или платформа не поддерживает многоадресную рассылку
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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/channels/MulticastChannel.html

Spec-Zone .ru
спецификации, руководства, описания, API