Spec-Zone.ru › OpenJDK 25

Интерфейс MulticastChannel

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

Многоадресная рассылка 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

Методы, объявленные в интерфейсе 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 — если параметр group не является адресом multicast или параметр group задает тип адреса, не поддерживаемый этим каналом
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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/MulticastChannel.html

Spec-Zone.ru

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