Класс MulticastSocket
- java.lang.Object
-
- java.net.DatagramSocket
-
- java.net.MulticastSocket
- Все реализованные интерфейсы:
- Closeable, AutoCloseable
public class MulticastSocket extends DatagramSocket
Класс сокета для мультиадресной передачи данных полезен для отправки и приема IP-пакетов с мультиадресной рассылкой. MulticastSocket представляет собой сокет DatagramSocket (UDP) с дополнительными возможностями для присоединения к «группам» других хостов с мультиадресной рассылкой в интернете.
Группа с мультиадресной рассылкой задается 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 могут одновременно подписываться на группу с мультиадресной рассылкой и порт, и все они будут получать дейтаграммы группы.
В настоящее время апплеты не могут использовать сокеты для мультиадресной рассылки.
- С момента:
- JDK1.1
Конструкторы
| Конструктор и описание |
|---|
MulticastSocket() Создать сокет для мультиадресной передачи. |
MulticastSocket(int port) Создать сокет для мультиадресной передачи и привязать его к определенному порту. |
MulticastSocket(SocketAddress bindaddr) Создать MulticastSocket, привязанный к указанному адресу сокета. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
InetAddress |
getInterface() Получить адрес сетевого интерфейса, используемого для пакетов с мультиадресной рассылкой. |
boolean |
getLoopbackMode() Получить настройку локального повтора мультиадресных дейтаграмм. |
NetworkInterface |
getNetworkInterface() Получить установленный сетевой интерфейс для мультиадресной рассылки. |
int |
getTimeToLive() Получить значение по умолчанию для времени жизни (time-to-live) для пакетов с мультиадресной рассылкой, отправляемых по сокету. |
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) Устарело. Используйте следующий код или эквивалент вместо него: ...... int ttl = mcastSocket.getTimeToLive(); mcastSocket.setTimeToLive(newttl); mcastSocket.send(p); mcastSocket.setTimeToLive(ttl); ...... |
void |
setInterface(InetAddress inf) Установить сетевой интерфейс для мультиадресных дейтаграмм, отправляемых через данный сокет, методы, поведение которых зависит от значения сетевого интерфейса. |
void |
setLoopbackMode(boolean disable) Отключить/Включить локальный повтор мультиадресных дейтаграмм. Опция используется кодом сетевого стека платформы в качестве подсказки для установки того, будет ли мультиадресный трафик повторен для локального сокета. |
void |
setNetworkInterface(NetworkInterface netIf) Укажите сетевой интерфейс для исходящих мультиадресных дейтаграмм, отправленных через этот сокет. |
void |
setTimeToLive(int ttl) Установить значение по умолчанию для времени жизни (time-to-live) для пакетов с мультиадресной рассылкой, отправляемых через этот |
void |
setTTL(byte ttl) Устарело. используйте метод setTimeToLive вместо него, который использует int вместо byte в качестве типа для ttl. |
Методы, унаследованные от класса java.net.DatagramSocket
bind, close, connect, connect, disconnect, getBroadcast, getChannel, getInetAddress, getLocalAddress, getLocalPort, getLocalSocketAddress, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoTimeout, getTrafficClass, isBound, isClosed, isConnected, receive, send, setBroadcast, setDatagramSocketImplFactory, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSoTimeout, setTrafficClass Методы, унаследованные от класса 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)
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.
Установить значение времени жизни для мультикаст-пакетов, отправляемых через этот MulticastSocket для управления областью действия мультикаста.
ttl — это бесзнаковое 8-битовое значение и, следовательно, должно быть в диапазоне 0 <= ttl <= 0xFF .
- Параметры:
-
ttl- время жизни - Исключения:
-
IOException- если при установке значения времени жизни произошла ошибка ввода-вывода - См. также:
getTTL()
setTimeToLive
public void setTimeToLive(int ttl)
throws IOException Установить значение времени жизни для мультикаст-пакетов, отправляемых через этот MulticastSocket для управления областью действия мультикаста.
Значение ttl должно быть в диапазоне 0 <= ttl <=
255 или будет выброшено IllegalArgumentException. Мультикаст-пакеты, отправленные с TTL 0, не передаются в сети, но могут быть доставлены локально.
- Параметры:
-
ttl- время жизни - Исключения:
-
IOException- если при установке значения времени жизни произошла ошибка ввода-вывода - См. также:
getTimeToLive()
getTTL
@Deprecated
public byte getTTL()
throws IOException Устарело. Используйте метод getTimeToLive вместо него, который возвращает int вместо byte.
Получить значение времени жизни для мультикаст-пакетов, отправляемых через сокет.
- Возвращает:
- значение времени жизни
- Исключения:
-
IOException- если при получении значения времени жизни произошла ошибка ввода-вывода - См. также:
setTTL(byte)
getTimeToLive
public int getTimeToLive()
throws IOException Получить значение времени жизни для мультикаст-пакетов, отправляемых через сокет.
- Возвращает:
- значение времени жизни
- Исключения:
-
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 Получить установленный интерфейс мультиадресной сети.
- Возвращает:
- установленный в настоящее время мультиадресной
NetworkInterfaceинтерфейс - Исключения:
-
SocketException- если возникает ошибка в базовом протоколе, например, ошибка TCP. - С момента:
- 1.4
- См. также:
setNetworkInterface(NetworkInterface)
setLoopbackMode
public void setLoopbackMode(boolean disable)
throws SocketException Отключить/включить локальное циклическое повторение мультиадресных датаграмм. Этот параметр используется кодом сетевого стека платформы как подсказка для настройки того, будет ли мультиадресная информация циклически возвращаться в локальный сокет.
Поскольку этот параметр является подсказкой, приложениям, которые хотят проверить, какой режим циклического повторения установлен, следует вызвать getLoopbackMode().
- Параметры:
-
disable- значениеtrue, чтобы отключить режим LoopbackMode - Исключения:
-
SocketException- если при установке значения произошла ошибка - С момента:
- 1.4
- См. также:
getLoopbackMode()
getLoopbackMode
public boolean getLoopbackMode()
throws SocketException Получить настройку для локального циклического повторения мультиадресных датаграмм.
- Возвращает:
- true, если режим LoopbackMode отключен
- Исключения:
-
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 в качестве аргументов. Если результат этого выражения false, этот метод вместо этого вызывает метод менеджера безопасности checkConnect с аргументами p.getAddress().getHostAddress() и p.getPort(). Каждый вызов метода менеджера безопасности может привести к SecurityException, если операция не разрешена.
- Параметры:
-
p- пакет, который должен быть отправлен. Пакет должен содержать целевой мультиадресной IP-адрес и данные, которые нужно отправить. Для отправки пакетов на целевой мультиадресной адрес не требуется быть членом группы. -
ttl- необязательное время жизни (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.