Интерфейс 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 |
Присоединяется к группе многоадресной рассылки, чтобы начать получать отправленные ей дейтаграммы с заданного адреса источника. |
Методы, объявленные в интерфейсе 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— если произошла ошибка ввода-вывода
© 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