Класс MulticastSocket
- java.lang.Object
-
- java.net.DatagramSocket
-
- java.net.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) | Устанавливает значение по умолчанию для времени жизни пакетов мультивещания, отправляемых из этого |
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 Устанавливает значение по умолчанию для времени жизни (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 Получить значение по умолчанию для времени жизни (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 Отправляет пакет датаграмм в пункт назначения с 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