Spec-Zone.ru › OpenJDK 27

Интерфейс 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)
Вступает в группу многоадресной рассылки для начала получения отправленных ей дейтаграмм с указанного адреса источника.

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

isOpen
Модификатор и тип Метод Описание
boolean isOpen()
Показывает, открыт ли этот канал.

Методы, объявленные в интерфейсе NetworkChannel

bind, getLocalAddress, getOption, setOption, supportedOptions
Модификатор и тип Метод Описание
NetworkChannel bind(SocketAddress local)
Привязывает сокет канала к локальному адресу.
SocketAddress getLocalAddress()
Возвращает адрес сокета, к которому привязан сокет этого канала.
<T> T getOption(SocketOption<T> name)
Возвращает значение параметра сокета.
<T> NetworkChannel setOption(SocketOption<T> name, T value)
Задаёт значение параметра сокета.
Set<SocketOption<?>> 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 — если параметр group не является адресом multicast или имеет тип адреса, не поддерживаемый этим каналом
IllegalStateException — если канал уже участвует в группе через этот интерфейс с фильтрацией по источникам
UnsupportedOperationException — если сокет канала не является сокетом интернет-протокола или платформа не поддерживает многоадресную рассылку
ClosedChannelException — если этот канал закрыт
IOException — если произошла ошибка ввода-вывода

join

MembershipKey join(InetAddress group, NetworkInterface interf, InetAddress source) throws IOException
Вступает в группу многоадресной рассылки для начала получения отправленных ей дейтаграмм с указанного адреса источника.

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

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

Параметры:
group — адрес многоадресной рассылки для вступления
interf — сетевой интерфейс, через который следует вступить в группу
source — адрес источника
Возвращает:
Ключ участия
Выбрасывает:
IllegalArgumentException — если параметр group не является адресом multicast, параметр source не является одноадресным адресом, параметр group имеет тип адреса, не поддерживаемый этим каналом, или параметр source имеет тип адреса, отличный от типа параметра group
IllegalStateException — если канал уже участвует в группе через указанный интерфейс и получает все дейтаграммы
UnsupportedOperationException — если сокет канала не является сокетом интернет-протокола, не поддерживается фильтрация источников или платформа не поддерживает многоадресную рассылку
ClosedChannelException — если этот канал закрыт
IOException — если произошла ошибка ввода-вывода

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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