Spec-Zone.ru › OpenJDK 8

Класс 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) для пакетов с мультиадресной рассылкой, отправляемых через этот MulticastSocket для управления областью действия мультиадресных сообщений.

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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API