Класс MulticastSocket

Все реализованные интерфейсы:
Closeable, AutoCloseable
public class MulticastSocket
extends DatagramSocket

Класс сокета для мультиадресной передачи датаграмм полезен для отправки и получения IP-пакетов мультивещания. MulticastSocket является (UDP) DatagramSocket с дополнительными возможностями для присоединения к «группам» других хостов мультивещания в интернете.

Группа мультивещания определяется IP-адресом класса D и стандартным номером порта UDP. IP-адреса класса D находятся в диапазоне 224.0.0.0 до 239.255.255.255, включительно. Адрес 224.0.0.0 зарезервирован и не должен использоваться.

Для присоединения к группе мультивещания необходимо сначала создать MulticastSocket с желаемым портом, а затем вызвать метод joinGroup(InetAddress groupAddr):

// join a Multicast group and send the group salutations
 ...
 String msg = "Hello";
 InetAddress group = InetAddress.getByName("228.5.6.7");
 MulticastSocket s = new MulticastSocket(6789);
 s.joinGroup(group);
 DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),
                             group, 6789);
 s.send(hi);
 // get their responses!
 byte[] buf = new byte[1000];
 DatagramPacket recv = new DatagramPacket(buf, buf.length);
 s.receive(recv);
 ...
 // OK, I'm done talking - leave the group...
 s.leaveGroup(group);
Когда сообщение отправляется в группу мультивещания, все подписчики на этом хосте и порту получают сообщение (в пределах времени жизни пакета, см. ниже). Для отправки сообщений в группу сокет не обязательно должен быть членом этой группы.

Когда сокет подписывается на группу/порт мультивещания, он получает датаграммы, отправленные другими хостами в эту группу/на этот порт, как и все остальные члены группы и порта. Сокет отказывается от членства в группе с помощью метода leaveGroup(InetAddress addr). Несколько MulticastSocket's могут одновременно подписаться на группу и порт мультивещания, и все они получат датаграммы группы.

В настоящее время апплеты не могут использовать сокеты мультивещания.

С тех пор:
1.1

Конструкторы

Конструктор Описание
MulticastSocket()

Создать сокет мультивещания.

MulticastSocket​(int port)

Создать сокет мультивещания и привязать его к определённому порту.

MulticastSocket​(SocketAddress bindaddr)

Создать MulticastSocket, привязанный к указанному адресу сокета.

Методы

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

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

boolean getLoopbackMode()

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

NetworkInterface getNetworkInterface()

Получить установленный сетевой интерфейс мультивещания.

int getTimeToLive()

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

byte getTTL()

Устаревший.

используйте метод getTimeToLive, который возвращает int вместо byte.

void joinGroup​(InetAddress mcastaddr)

Подключается к группе мультивещания.

void joinGroup​(SocketAddress mcastaddr, NetworkInterface netIf)

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

void leaveGroup​(InetAddress mcastaddr)

Выход из группы мультивещания.

void leaveGroup​(SocketAddress mcastaddr, NetworkInterface netIf)

Выход из группы мультивещания на указанном локальном интерфейсе.

void send​(DatagramPacket p, byte ttl)

Устаревший.

Используйте следующий код или его эквивалент вместо этого: ......

void setInterface​(InetAddress inf)

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

void setLoopbackMode​(boolean disable)

Отключение/Включение локального петлевого обращения мультиадресных датаграмм. Опция используется кодом сетевого стека платформы в качестве подсказки, устанавливающей, будет ли возвращаться мультиадресный трафик обратно локальному сокету.

void setNetworkInterface​(NetworkInterface netIf)

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

void setTimeToLive​(int ttl)

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

void setTTL​(byte ttl)

Устаревший.

используйте метод setTimeToLive вместо него, который использует int вместо byte в качестве типа для ttl.

Методы, объявленные в классе java.net.DatagramSocket

bind, close, connect, connect, disconnect, getBroadcast, getChannel, getInetAddress, getLocalAddress, getLocalPort, getLocalSocketAddress, getOption, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoTimeout, getTrafficClass, isBound, isClosed, isConnected, receive, send, setBroadcast, setDatagramSocketImplFactory, setOption, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSoTimeout, setTrafficClass, supportedOptions

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Конструкторы

MulticastSocket

public MulticastSocket()
                throws IOException

Создать сокет мультивещания.

Если существует менеджер безопасности, его метод checkListen вызывается первым с аргументом 0, чтобы убедиться, что операция разрешена. Это может привести к исключению SecurityException.

При создании сокета вызывается метод DatagramSocket.setReuseAddress(boolean) для включения опции сокета SO_REUSEADDR.

Исключения:
IOException - если при создании MulticastSocket произошла ошибка ввода-вывода
SecurityException - если менеджер безопасности существует и его метод checkListen не разрешает операцию.
См. также:
SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean), DatagramSocketImpl.setOption(SocketOption, Object)

MulticastSocket

public MulticastSocket(int port)
                throws IOException

Создать сокет мультивещания и привязать его к определённому порту.

Если существует менеджер безопасности, его метод checkListen вызывается первым с аргументом port для разрешения операции. Это может привести к исключению SecurityException.

При создании сокета вызывается метод DatagramSocket.setReuseAddress(boolean) для включения опции сокета SO_REUSEADDR.

Параметры:
port - используемый порт
Исключения:
IOException - если при создании MulticastSocket произошла ошибка ввода-вывода
SecurityException - если менеджер безопасности существует и его метод checkListen не разрешает операцию.
См. также:
SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean)

MulticastSocket

public MulticastSocket(SocketAddress bindaddr)
                throws IOException

Создать MulticastSocket, привязанный к указанному адресу сокета.

Или, если адрес null, создать незавязанный сокет.

Если существует менеджер безопасности, его метод checkListen вызывается первым с портом SocketAddress в качестве аргумента, чтобы разрешить операцию. Это может привести к исключению SecurityException.

При создании сокета вызывается метод DatagramSocket.setReuseAddress(boolean) для включения опции сокета SO_REUSEADDR.

Параметры:
bindaddr - Адрес сокета для привязки, или null для незавязанного сокета.
Исключения:
IOException - если при создании MulticastSocket произошла ошибка ввода-вывода
SecurityException - если менеджер безопасности существует и его метод checkListen не разрешает операцию.
С тех пор:
1.4
См. также:
SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean)

Методы

setTTL

@Deprecated
public void setTTL(byte ttl)
            throws IOException
Устарело.
Используйте метод setTimeToLive вместо него, который использует int вместо byte в качестве типа для ttl.

Устанавливает значение по умолчанию для времени жизни (TTL) для мультимедийных пакетов, отправляемых на этот MulticastSocket , для управления охватом мультимедиа.

Значение ttl является беззнаковым 8-битным значением и должно находиться в диапазоне 0 <= ttl <= 0xFF .

Параметры:
ttl - время жизни
Исключения:
IOException - если произошла ошибка ввода-вывода при установке значения по умолчанию для времени жизни
См. также:
getTTL()

setTimeToLive

public void setTimeToLive(int ttl)
                   throws IOException

Устанавливает значение по умолчанию для времени жизни (TTL) для мультимедийных пакетов, отправляемых на этот MulticastSocket , для управления охватом мультимедиа.

Значение ttl должно находиться в диапазоне 0 <= ttl <= 255 или будет выброшено исключение IllegalArgumentException. Мультимедийные пакеты, отправленные с TTL 0, не передаются по сети, но могут быть доставлены локально.

Параметры:
ttl - время жизни
Исключения:
IOException - если произошла ошибка ввода-вывода при установке значения по умолчанию для времени жизни
См. также:
getTimeToLive()

getTTL

@Deprecated
public byte getTTL()
            throws IOException
Устарело.
Используйте метод getTimeToLive вместо него, который возвращает int вместо byte.

Получить значение по умолчанию для времени жизни (TTL) мультимедийных пакетов, отправляемых через сокет.

Возвращает:
значение по умолчанию для времени жизни
Исключения:
IOException - если произошла ошибка ввода-вывода при получении значения по умолчанию для времени жизни
См. также:
setTTL(byte)

getTimeToLive

public int getTimeToLive()
                  throws IOException

Получить значение по умолчанию для времени жизни (TTL) мультимедийных пакетов, отправляемых через сокет.

Возвращает:
значение по умолчанию для времени жизни
Исключения:
IOException - если произошла ошибка ввода-вывода при получении значения по умолчанию для времени жизни
См. также:
setTimeToLive(int)

joinGroup

public void joinGroup(InetAddress mcastaddr)
               throws IOException

Подключается к группе мультикаста. Его поведение может быть затронуто setInterface или setNetworkInterface.

Если существует менеджер безопасности, этот метод сначала вызывает его метод checkMulticast с аргументом mcastaddr.

Параметры:
mcastaddr - адрес мультигруппы для подключения
Исключения:
IOException - если произошла ошибка при подключении, или если адрес не является адресом мультигруппы, или платформа не поддерживает мультикаст
SecurityException - если менеджер безопасности существует и его метод checkMulticast не разрешает подключение.
См. также:
SecurityManager.checkMulticast(InetAddress)

leaveGroup

public void leaveGroup(InetAddress mcastaddr)
                throws IOException

Выходит из группы мультикаста. Его поведение может быть затронуто setInterface или setNetworkInterface.

Если существует менеджер безопасности, этот метод сначала вызывает его метод checkMulticast с аргументом mcastaddr.

Параметры:
mcastaddr - адрес мультигруппы для выхода
Исключения:
IOException - если произошла ошибка при выходе или адрес не является адресом мультигруппы.
SecurityException - если менеджер безопасности существует и его метод checkMulticast не разрешает операцию.
См. также:
SecurityManager.checkMulticast(InetAddress)

joinGroup

public void joinGroup(SocketAddress mcastaddr,
                      NetworkInterface netIf)
               throws IOException

Подключается к указанной группе мультикаста на указанном интерфейсе.

Если существует менеджер безопасности, этот метод сначала вызывает его метод checkMulticast с аргументом mcastaddr.

Параметры:
mcastaddr - адрес мультигруппы для подключения
netIf - определяет локальный интерфейс для приема пакетов мультимедиа-датаграмм или null, чтобы использовать интерфейс, установленный методами setInterface(InetAddress) или setNetworkInterface(NetworkInterface)
Исключения:
IOException - если произошла ошибка при подключении, или адрес не является адресом мультигруппы, или платформа не поддерживает мультикаст
SecurityException - если менеджер безопасности существует и его метод checkMulticast не разрешает подключение.
IllegalArgumentException - если mcastaddr равен null или является классом SocketAddress, не поддерживаемым данным сокетом
С:
1.4
См. также:
SecurityManager.checkMulticast(InetAddress)

leaveGroup

public void leaveGroup(SocketAddress mcastaddr,
                       NetworkInterface netIf)
                throws IOException

Выходит из группы мультикаста на указанном локальном интерфейсе.

Если существует менеджер безопасности, этот метод сначала вызывает его метод checkMulticast с аргументом mcastaddr.

Параметры:
mcastaddr - адрес мультигруппы для выхода
netIf - определяет локальный интерфейс или null, чтобы использовать интерфейс, установленный методами setInterface(InetAddress) или setNetworkInterface(NetworkInterface)
Исключения:
IOException - если произошла ошибка при выходе или адрес не является адресом мультигруппы.
SecurityException - если менеджер безопасности существует и его метод checkMulticast не разрешает операцию.
IllegalArgumentException - если mcastaddr равен null или является классом SocketAddress, не поддерживаемым данным сокетом
С:
1.4
См. также:
SecurityManager.checkMulticast(InetAddress)

setInterface

public void setInterface(InetAddress inf)
                  throws SocketException

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

Параметры:
inf - адрес InetAddress
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
См. также:
getInterface()

getInterface

public InetAddress getInterface()
                         throws SocketException

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

Возвращает:
Объект InetAddress, представляющий адрес сетевого интерфейса, используемого для мультикаст-пакетов.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
См. также:
setInterface(java.net.InetAddress)

setNetworkInterface

public void setNetworkInterface(NetworkInterface netIf)
                         throws SocketException

Указать сетевой интерфейс для отправляемых пакетов мультикаста на данном сокете.

Параметры:
netIf - интерфейс
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С:
1.4
См. также:
getNetworkInterface()

getNetworkInterface

public NetworkInterface getNetworkInterface()
                                     throws SocketException

Получить заданный сетевой интерфейс мультикаста.

Возвращает:
сетевой интерфейс мультикаста, установленный в данный момент
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С:
1.4
См. также:
setNetworkInterface(NetworkInterface)

setLoopbackMode

public void setLoopbackMode(boolean disable)
                     throws SocketException

Отключение/включение локального циклического повторения пакетов мультикаста. Этот параметр используется кодом сети платформы как подсказка для определения того, будет ли мультимедийный трафик возвращаться на локальный сокет.

Так как этот параметр является подсказкой, приложения, которые хотят проверить, какой режим циклического повторения установлен, должны вызвать getLoopbackMode()

Параметры:
disable - true для отключения режима циклического повторения
Исключения:
SocketException - если произошла ошибка при установке значения
С:
1.4
См. также:
getLoopbackMode()

getLoopbackMode

public boolean getLoopbackMode()
                        throws SocketException

Получить значение локального циклического повторения пакетов мультикаста.

Возвращает:
true, если режим циклического повторения отключен
Исключения:
SocketException - если произошла ошибка при получении значения
С:
1.4
См. также:
setLoopbackMode(boolean)

send

@Deprecated
public void send(DatagramPacket p,
                 byte ttl)
          throws IOException
Устарело.
Вместо этого используйте следующий код или его эквивалент: ...... int ttl = mcastSocket.getTimeToLive(); mcastSocket.setTimeToLive(newttl); mcastSocket.send(p); mcastSocket.setTimeToLive(ttl); ......

Отправляет пакет датаграмм в пункт назначения с TTL (время жизни) отличным от значения по умолчанию для сокета. Этот метод должен использоваться только в случаях, когда требуется конкретное значение TTL; в противном случае предпочтительнее один раз установить TTL на сокете и использовать это значение по умолчанию для всех пакетов. Этот метод не изменяет значение TTL по умолчанию для сокета. Его поведение может быть затронуто setInterface.

Если существует менеджер безопасности, этот метод сначала выполняет некоторые проверки безопасности. Во-первых, если p.getAddress().isMulticastAddress() равно true, этот метод вызывает метод менеджера безопасности checkMulticast с p.getAddress() и ttl в качестве аргументов. Если результат этого выражения ложный, этот метод вместо этого вызывает метод менеджера безопасности checkConnect с аргументами p.getAddress().getHostAddress() и p.getPort(). Каждый вызов метода менеджера безопасности может привести к исключению SecurityException, если операция не разрешена.

Параметры:
p - это пакет, который необходимо отправить. Пакет должен содержать адрес назначения мультикаст-IP и данные, которые необходимо отправить. Необязательно быть членом группы для отправки пакетов на адрес назначения мультикаст-адреса.
ttl - необязательное время жизни для мультикаст-пакета. Значение ttl по умолчанию равно 1.
Исключения:
IOException - генерируется, если произошла ошибка, например, ошибка при установке ttl.
SecurityException - если существует менеджер безопасности, и его метод checkMulticast или checkConnect не разрешает отправку.
См. также:
DatagramSocket.send(java.net.DatagramPacket), DatagramSocket.receive(java.net.DatagramPacket), SecurityManager.checkMulticast(java.net.InetAddress, byte), SecurityManager.checkConnect(java.lang.String, int)

© 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/net/MulticastSocket.html

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