Spec-Zone.ru › OpenJDK 27

Класс MulticastSocket

java.lang.Object
java.net.DatagramSocket
java.net.MulticastSocket
Все реализуемые интерфейсы:
Closeable, AutoCloseable
public class MulticastSocket extends DatagramSocket
MulticastSocket — это сокет дейтаграмм, который удобно использовать для отправки и получения IP-дейтаграмм многоадресной рассылки. Конструкторы MulticastSocket создают сокет с включёнными соответствующими параметрами сокета, благодаря чему он подходит для получения дейтаграмм многоадресной рассылки. Класс MulticastSocket также определяет удобные методы установки и получения параметров сокета, часто используемых приложениями многоадресной рассылки.

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

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

Чтобы присоединиться к группе многоадресной рассылки, сначала создают MulticastSocket с нужным портом, а затем вызывают метод joinGroup, указывая адрес группы и сетевой интерфейс, через который будут приниматься дейтаграммы многоадресной рассылки:

// join a Multicast group and send the group salutations
...
String msg = "Hello";
InetAddress mcastaddr = InetAddress.getByName("228.5.6.7");
InetSocketAddress group = new InetSocketAddress(mcastaddr, 6789);
NetworkInterface netIf = NetworkInterface.getByName("bge0");
MulticastSocket s = new MulticastSocket(6789);

s.joinGroup(new InetSocketAddress(mcastaddr, 0), netIf);
byte[] msgBytes = msg.getBytes(StandardCharsets.UTF_8);
DatagramPacket hi = new DatagramPacket(msgBytes, msgBytes.length, group);
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, netIf);
При отправке сообщения группе многоадресной рассылки его получают все подписанные получатели на этом узле и порту (в пределах времени жизни пакета, см. ниже). Сокету не обязательно быть членом группы многоадресной рассылки, чтобы отправлять ей сообщения.

Когда сокет подписывается на группу/порт многоадресной рассылки, он получает дейтаграммы, отправленные другими узлами этой группе/порту, как и все остальные участники группы и порта. Сокет покидает группу с помощью метода leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf). Несколько объектов MulticastSocket могут одновременно подписаться на группу и порт многоадресной рассылки, и все они будут получать дейтаграммы группы.

Классы DatagramSocket и MulticastSocket предоставляют удобные методы для установки и получения нескольких параметров сокета. Как и DatagramSocket, этот класс также поддерживает методы setOption и getOption для установки и получения параметров сокета. Набор поддерживаемых параметров сокета определён в DatagramSocket. Также могут поддерживаться дополнительные параметры, специфичные для реализации.

Примечание к API:
DatagramSocket можно напрямую использовать для отправки и получения дейтаграмм многоадресной рассылки. DatagramChannel реализует интерфейс MulticastChannel и предоставляет альтернативный API для отправки и получения дейтаграмм многоадресной рассылки. API MulticastChannel поддерживает многоадресную рассылку как от любого источника, так и от определённого источника. Рассмотрите возможность использования DatagramChannel для многоадресной рассылки.
Начиная с:
1.1

Краткое описание конструкторов

Конструктор Описание
MulticastSocket()
Создаёт сокет многоадресной рассылки и привязывает его к любому доступному порту на локальном компьютере.
MulticastSocket(int port)
Создаёт сокет многоадресной рассылки и привязывает его к указанному порту на локальном компьютере.
MulticastSocket(SocketAddress bindaddr)
Создаёт сокет многоадресной рассылки, привязанный к указанному локальному адресу сокета.

Краткое описание методов

Модификатор и тип Метод Описание
InetAddress getInterface()
Устарел.
Сетевой интерфейс может быть неоднозначно определён по возвращаемому InetAddress.
boolean getLoopbackMode()
Устарел.
Вместо этого используйте DatagramSocket.getOption(SocketOption) с StandardSocketOptions.IP_MULTICAST_LOOP.
NetworkInterface getNetworkInterface()
Возвращает сетевой интерфейс многоадресной рассылки, заданный для исходящих дейтаграмм многоадресной рассылки, отправляемых этим сокетом.
int getTimeToLive()
Возвращает время жизни по умолчанию для пакетов многоадресной рассылки, отправляемых через сокет.
void joinGroup(InetAddress mcastaddr)
Устарел.
Этот метод не принимает сетевой интерфейс, через который следует присоединиться к группе многоадресной рассылки.
void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf)
Присоединяется к группе многоадресной рассылки.
void leaveGroup(InetAddress mcastaddr)
Устарел.
Этот метод не принимает сетевой интерфейс, через который следует покинуть группу многоадресной рассылки.
void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)
Покидает группу многоадресной рассылки на указанном локальном интерфейсе.
void setInterface(InetAddress inf)
Устарел.
Сетевой интерфейс может быть неоднозначно определён по InetAddress.
void setLoopbackMode(boolean disable)
Устарел.
Вместо этого используйте DatagramSocket.setOption(SocketOption, Object) с StandardSocketOptions.IP_MULTICAST_LOOP.
void setNetworkInterface(NetworkInterface netIf)
Задаёт сетевой интерфейс для исходящих дейтаграмм многоадресной рассылки, отправляемых этим сокетом.
void setTimeToLive(int ttl)
Задаёт время жизни по умолчанию для пакетов многоадресной рассылки, отправляемых через этот MulticastSocket, чтобы управлять областью действия многоадресной рассылки.

Методы, объявленные в классе 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
Модификатор и тип Метод Описание
void bind(SocketAddress addr)
Привязывает этот DatagramSocket к определённому адресу и порту.
void close()
Закрывает этот сокет дейтаграмм.
void connect(InetAddress address, int port)
Подключает сокет к удалённому адресу.
void connect(SocketAddress addr)
Подключает этот сокет к удалённому адресу сокета (IP-адрес + номер порта).
void disconnect()
Отключает сокет.
boolean getBroadcast()
Проверяет, включён ли SO_BROADCAST.
DatagramChannel getChannel()
Возвращает связанный с этим сокетом дейтаграмм уникальный объект DatagramChannel, если он существует.
InetAddress getInetAddress()
Возвращает адрес, к которому подключён этот сокет.
InetAddress getLocalAddress()
Возвращает локальный адрес, к которому привязан сокет.
int getLocalPort()
Возвращает номер порта на локальном узле, к которому привязан этот сокет.
SocketAddress getLocalSocketAddress()
Возвращает адрес конечной точки, к которой привязан этот сокет.
<T> T getOption(SocketOption<T> name)
Возвращает значение параметра сокета.
int getPort()
Возвращает номер порта, к которому подключён этот сокет.
int getReceiveBufferSize()
Возвращает значение параметра SO_RCVBUF для этого DatagramSocket, то есть размер буфера в байтах, используемого платформой для ввода данных через этот DatagramSocket.
SocketAddress getRemoteSocketAddress()
Возвращает адрес конечной точки, к которой подключён этот сокет, или null, если он не подключён.
boolean getReuseAddress()
Проверяет, включён ли SO_REUSEADDR.
int getSendBufferSize()
Возвращает значение параметра SO_SNDBUF для этого DatagramSocket, то есть размер буфера в байтах, используемого платформой для вывода данных через этот DatagramSocket.
int getSoTimeout()
Возвращает значение параметра SO_TIMEOUT. Значение 0 означает, что параметр отключён (то есть время ожидания не ограничено).
int getTrafficClass()
Возвращает класс трафика или тип обслуживания в заголовке IP-дейтаграммы для пакетов, отправляемых этим DatagramSocket.
boolean isBound()
Возвращает состояние привязки сокета.
boolean isClosed()
Возвращает, закрыт ли сокет.
boolean isConnected()
Возвращает состояние подключения сокета.
void receive(DatagramPacket p)
Получает пакет дейтаграммы через этот сокет.
void send(DatagramPacket p)
Отправляет пакет дейтаграммы через этот сокет.
void setBroadcast(boolean on)
Включает или отключает SO_BROADCAST.
static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac)
Устарел.
Используйте DatagramChannel или создайте подкласс непосредственно от DatagramSocket.
<T> DatagramSocket setOption(SocketOption<T> name, T value)
Устанавливает значение параметра сокета.
void setReceiveBufferSize(int size)
Устанавливает для параметра SO_RCVBUF указанное значение в этом DatagramSocket.
void setReuseAddress(boolean on)
Включает или отключает параметр сокета SO_REUSEADDR.
void setSendBufferSize(int size)
Устанавливает для параметра SO_SNDBUF указанное значение в этом DatagramSocket.
void setSoTimeout(int timeout)
Включает или отключает SO_TIMEOUT, задавая время ожидания в миллисекундах.
void setTrafficClass(int tc)
Устанавливает класс трафика или октет типа обслуживания в заголовке IP-дейтаграммы для дейтаграмм, отправляемых этим DatagramSocket.
Set<SocketOption<?>> supportedOptions()
Возвращает набор параметров сокета, поддерживаемых этим сокетом.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект другому объекту.
protected void finalize()
Устарел, будет удалён: этот элемент API может быть удалён в будущей версии.
Финализация устарела и может быть удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно посредством вызова уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно посредством вызова уведомления или прерывания, либо до истечения определённого промежутка времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно посредством вызова уведомления или прерывания, либо до истечения определённого промежутка времени.

Подробное описание конструкторов

MulticastSocket

public MulticastSocket() throws IOException
Создает многоадресный сокет и привязывает его к любому доступному порту на локальном компьютере. Сокет будет привязан к адресу wildcard.

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

Вызывает исключение:
IOException — если при создании MulticastSocket возникает исключение ввода-вывода
См. также:
  • DatagramSocket.setReuseAddress(boolean)
  • DatagramSocketImpl.setOption(SocketOption, Object)

MulticastSocket

public MulticastSocket(int port) throws IOException
Создает многоадресный сокет и привязывает его к указанному порту на локальном компьютере. Сокет будет привязан к адресу wildcard.

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

Параметры:
port — порт для использования
Вызывает исключение:
IOException — если при создании MulticastSocket возникает исключение ввода-вывода
IllegalArgumentException — если порт вне допустимого диапазона.
См. также:
  • DatagramSocket.setReuseAddress(boolean)

MulticastSocket

public MulticastSocket(SocketAddress bindaddr) throws IOException
Создает многоадресный сокет, привязанный к указанному локальному адресу сокета.

Если адрес равен null, будет создан непривязанный сокет.

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

Параметры:
bindaddr — адрес сокета для привязки или null для непривязанного сокета.
Вызывает исключение:
IOException — если при создании MulticastSocket возникает исключение ввода-вывода
Начиная с версии:
1.4
См. также:
  • DatagramSocket.setReuseAddress(boolean)

Подробное описание методов

setTimeToLive

public void setTimeToLive(int ttl) throws IOException
Задает время жизни по умолчанию для многоадресных пакетов, отправляемых через этот MulticastSocket, чтобы управлять областью действия многоадресных рассылок.

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

Примечание API:
Этот метод эквивалентен вызову setOption(StandardSocketOptions.IP_MULTICAST_TTL, ttl).
Параметры:
ttl — время жизни
Вызывает исключение:
IOException — если при установке значения времени жизни по умолчанию возникает исключение ввода-вывода или сокет закрыт.
Начиная с версии:
1.2
См. также:
  • getTimeToLive()
  • StandardSocketOptions.IP_MULTICAST_TTL

getTimeToLive

public int getTimeToLive() throws IOException
Возвращает время жизни по умолчанию для многоадресных пакетов, отправляемых через сокет.
Примечание API:
Этот метод эквивалентен вызову getOption(StandardSocketOptions.IP_MULTICAST_TTL).
Возвращает:
значение времени жизни по умолчанию
Вызывает исключение:
IOException — если при получении значения времени жизни по умолчанию возникает исключение ввода-вывода или сокет закрыт.
Начиная с версии:
1.2
См. также:
  • setTimeToLive(int)
  • StandardSocketOptions.IP_MULTICAST_TTL

joinGroup

@Deprecated(since="14") public void joinGroup(InetAddress mcastaddr) throws IOException
Устарел.
Этот метод не принимает сетевой интерфейс, через который следует присоединиться к многоадресной группе. Вместо него используйте joinGroup(SocketAddress, NetworkInterface).
Присоединяется к многоадресной группе. На его поведение могут влиять setInterface или setNetworkInterface.
Примечание API:
Вызов этого метода эквивалентен вызову joinGroup(new InetSocketAddress(mcastaddr, 0), null).
Параметры:
mcastaddr — адрес многоадресной группы, к которой нужно присоединиться
Вызывает исключение:
IOException — если произошла ошибка при присоединении, адрес не является многоадресным, платформа не поддерживает многоадресную рассылку или сокет закрыт.

leaveGroup

@Deprecated(since="14") public void leaveGroup(InetAddress mcastaddr) throws IOException
Устарел.
Этот метод не принимает сетевой интерфейс, через который следует покинуть многоадресную группу. Вместо него используйте leaveGroup(SocketAddress, NetworkInterface).
Покидает многоадресную группу. На его поведение могут влиять setInterface или setNetworkInterface.
Примечание API:
Вызов этого метода эквивалентен вызову leaveGroup(new InetSocketAddress(mcastaddr, 0), null).
Параметры:
mcastaddr — адрес многоадресной группы, которую нужно покинуть
Вызывает исключение:
IOException — если произошла ошибка при выходе, адрес не является многоадресным или сокет закрыт.

joinGroup

public void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
Присоединяется к многоадресной группе.

Для присоединения к многоадресной группе вызывающий код должен указать IP-адрес группы и локальный сетевой интерфейс, через который будут приниматься многоадресные пакеты.

  • Аргумент mcastaddr указывает IP-адрес многоадресной группы, к которой нужно присоединиться. По историческим причинам он задается как SocketAddress. Реализация по умолчанию поддерживает только InetSocketAddress; информация о port игнорируется.
  • Аргумент netIf задает локальный интерфейс для приема многоадресных дейтаграмм либо null, чтобы использовать интерфейс, заданный для исходящих многоадресных дейтаграмм. Если указано null и интерфейс не задан, поведение не определено: может быть выбран любой интерфейс либо операция может завершиться с ошибкой SocketException.

Этот метод можно вызывать несколько раз, чтобы присоединиться к нескольким разным многоадресным группам или к одной и той же группе в нескольких разных сетях. Однако если сокет уже является участником группы, будет выброшено IOException.

Переопределяет:
joinGroup в классе DatagramSocket
Параметры:
mcastaddr — задает адрес многоадресной группы, к которой нужно присоединиться.
netIf — задает локальный интерфейс для приема многоадресных дейтаграмм либо null.
Вызывает исключение:
IOException — если произошла ошибка при присоединении, адрес не является многоадресным, платформа не поддерживает многоадресную рассылку или сокет закрыт
IllegalArgumentException — если mcastaddr равен null или является подклассом SocketAddress, который не поддерживается этим сокетом
Начиная с версии:
1.4
См. также:
  • MulticastChannel.join(InetAddress, NetworkInterface)
  • StandardSocketOptions.IP_MULTICAST_IF
  • setNetworkInterface(NetworkInterface)
  • setInterface(InetAddress)

leaveGroup

public void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
Покидает многоадресную группу через указанный локальный интерфейс.
Переопределяет:
leaveGroup в классе DatagramSocket
Примечание API:
Аргументы mcastaddr и netIf должны указывать многоадресную группу, к которой этот DatagramSocket ранее присоединился.

Этот метод можно вызывать несколько раз, чтобы покинуть несколько ранее присоединенных многоадресных групп или покинуть одну и ту же группу в нескольких разных сетях. Однако если сокет не является участником указанной группы в указанной сети, будет выброшено IOException.

Параметры:
mcastaddr — адрес многоадресной группы, которую нужно покинуть. Он должен содержать тот же IP-адрес, который использовался при присоединении к группе.
netIf — задает локальный интерфейс либо null, чтобы использовать интерфейс, заданный для исходящих многоадресных дейтаграмм. Если указано null и интерфейс не задан, поведение не определено: может быть выбран любой интерфейс либо операция может завершиться с ошибкой SocketException.
Вызывает исключение:
IOException — если произошла ошибка при выходе, адрес не является многоадресным или сокет закрыт.
IllegalArgumentException — если mcastaddr равен null или является подклассом SocketAddress, который не поддерживается этим сокетом.
Начиная с версии:
1.4
См. также:
  • joinGroup(SocketAddress, NetworkInterface)

setInterface

@Deprecated(since="14") public void setInterface(InetAddress inf) throws SocketException
Устарел.
InetAddress может не обеспечивать однозначную идентификацию сетевого интерфейса. Вместо него используйте setNetworkInterface(NetworkInterface).
Задает сетевой интерфейс для многоадресной рассылки, используемый методами, на поведение которых влияет значение сетевого интерфейса. Полезно для компьютеров с несколькими сетевыми интерфейсами.
Параметры:
inf — InetAddress
Вызывает исключение:
SocketException — если в базовом протоколе возникает ошибка, например ошибка TCP, или сокет закрыт.
См. также:
  • getInterface()

getInterface

@Deprecated(since="14") public InetAddress getInterface() throws SocketException
Устарел.
Сетевой интерфейс может быть однозначно не определен возвращаемым InetAddress. Вместо него используйте getNetworkInterface().
Возвращает адрес сетевого интерфейса, используемого для многоадресных пакетов.
Возвращает:
InetAddress, представляющий адрес сетевого интерфейса, используемого для многоадресных пакетов, или, если интерфейс не задан, InetAddress, представляющий любой локальный адрес.
Вызывает исключение:
SocketException — если в базовом протоколе возникает ошибка, например ошибка TCP, или сокет закрыт.
См. также:
  • setInterface(java.net.InetAddress)

setNetworkInterface

public void setNetworkInterface(NetworkInterface netIf) throws SocketException
Задает сетевой интерфейс для исходящих многоадресных дейтаграмм, отправляемых через этот сокет.
Примечание API:
Этот метод эквивалентен вызову setOption(StandardSocketOptions.IP_MULTICAST_IF, netIf).
Параметры:
netIf — интерфейс
Вызывает исключение:
SocketException — если в базовом протоколе возникает ошибка, например ошибка TCP, или сокет закрыт.
Начиная с версии:
1.4
См. также:
  • getNetworkInterface()
  • StandardSocketOptions.IP_MULTICAST_IF

getNetworkInterface

public NetworkInterface getNetworkInterface() throws SocketException
Возвращает сетевой интерфейс для многоадресной рассылки, заданный для отправки исходящих многоадресных дейтаграмм через этот сокет.
Примечание API:
Если интерфейс задан, этот метод эквивалентен вызову getOption(StandardSocketOptions.IP_MULTICAST_IF).
Возвращает:
Текущий заданный многоадресный NetworkInterface. Если интерфейс не задан, возвращается NetworkInterface-заполнитель; он содержит один InetAddress, представляющий любой локальный адрес.
Вызывает исключение:
SocketException — если в базовом протоколе возникает ошибка, например ошибка TCP, или сокет закрыт.
Начиная с версии:
1.4
См. также:
  • setNetworkInterface(NetworkInterface)
  • StandardSocketOptions.IP_MULTICAST_IF

setLoopbackMode

@Deprecated(since="14") public void setLoopbackMode(boolean disable) throws SocketException
Устарел.
Вместо этого используйте DatagramSocket.setOption(SocketOption, Object) с параметром StandardSocketOptions.IP_MULTICAST_LOOP. Режим обратной петли включен по умолчанию; MulticastSocket.setOption(StandardSocketOptions.IP_MULTICAST_LOOP, false) отключает его.
Отключает или включает локальную обратную петлю многоадресных дейтаграмм. Параметр используется сетевым кодом платформы как подсказка при определении того, будут ли многоадресные данные возвращаться в локальный сокет.

Поскольку этот параметр является подсказкой, приложениям, которым нужно проверить заданный режим обратной петли, следует вызвать getLoopbackMode().

Параметры:
disable — true для отключения режима обратной петли
Вызывает исключение:
SocketException — если при установке значения возникает ошибка или сокет закрыт.
Начиная с версии:
1.4
См. также:
  • getLoopbackMode()

getLoopbackMode

@Deprecated(since="14") public boolean getLoopbackMode() throws SocketException
Устарел.
Вместо этого используйте DatagramSocket.getOption(SocketOption) с параметром StandardSocketOptions.IP_MULTICAST_LOOP.
Возвращает настройку локальной обратной петли многоадресных дейтаграмм.
Возвращает:
true, если режим обратной петли отключен
Вызывает исключение:
SocketException — если при получении значения возникает ошибка или сокет закрыт.
Начиная с версии:
1.4
См. также:
  • setLoopbackMode(boolean)

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая обзоры концепций, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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