Интерфейс 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 |
Вступает в группу многоадресной рассылки для начала получения отправленных ей дейтаграмм с указанного адреса источника. |
Методы, объявленные в интерфейсе Channel
isOpen | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
isOpen() |
Показывает, открыт ли этот канал. |
Методы, объявленные в интерфейсе NetworkChannel
bind, getLocalAddress, getOption, setOption, supportedOptions | Модификатор и тип | Метод | Описание |
|---|---|---|
NetworkChannel |
bind |
Привязывает сокет канала к локальному адресу. |
SocketAddress |
getLocalAddress() |
Возвращает адрес сокета, к которому привязан сокет этого канала. |
<T> T |
getOption |
Возвращает значение параметра сокета. |
<T> NetworkChannel |
setOption |
Задаёт значение параметра сокета. |
Set |
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— если произошла ошибка ввода-вывода
© 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.