Spec-Zone.ru › OpenJDK 17

Класс DatagramSocket

java.lang.Object
java.net.DatagramSocket
Все реализованные интерфейсы:
Closeable, AutoCloseable
Прямые известные подклассы:
MulticastSocket
public class DatagramSocket extends Object implements Closeable
Этот класс представляет сокет для отправки и получения пакетов данных.

Сокет данных — это точка отправки или получения для сервиса доставки пакетов. Каждый пакет, отправленный или полученный через сокет данных, индивидуально адресован и маршрутизируется. Несколько пакетов, отправленных с одной машины на другую, могут быть маршрутизированы по-разному и могут прибыть в любом порядке.

Когда это возможно, недавно созданный DatagramSocket имеет включенный сокет-параметр SO_BROADCAST, чтобы разрешить передачу широковещательных пакетов данных. Для получения широковещательных пакетов сокет DatagramSocket должен быть привязан к адресному маске. В некоторых реализациях широковещательные пакеты также могут быть получены, когда DatagramSocket привязан к более конкретному адресу.

Пример:


              DatagramSocket s = new DatagramSocket(null);
              s.bind(new InetSocketAddress(8888));
 
Что эквивалентно:

              DatagramSocket s = new DatagramSocket(8888);
 
В обоих случаях будет создан DatagramSocket, способный принимать широковещательные данные на UDP-порту 8888.

Класс DatagramSocket определяет удобные методы для установки и получения нескольких параметров сокета. Этот класс также определяет методы setOption и getOption для установки и запроса параметров сокета. Сокет DatagramSocket поддерживает следующие параметры сокета:

Параметры сокета
Имя параметра Описание
SO_SNDBUF Размер буфера отправки сокета в байтах
SO_RCVBUF Размер буфера приема сокета в байтах
SO_REUSEADDR Использование адреса
SO_BROADCAST Разрешить передачу широковещательных пакетов
IP_TOS Октет типа обслуживания (ToS) в заголовке Internet Protocol (IP)

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

Мультимедийные параметры
Имя параметра Описание
IP_MULTICAST_IF Сетевой интерфейс для пакетов интернет-протокола (IP) multicast
IP_MULTICAST_TTL Время жизни для пакетов интернет-протокола (IP) multicast
IP_MULTICAST_LOOP Циклическое обращение для пакетов интернет-протокола (IP) multicast
Реализация также может поддерживать дополнительные параметры.
Примечание API:
Мультимедиа с DatagramSocket

DatagramChannel реализует интерфейс MulticastChannel и предоставляет альтернативный API для отправки и получения мультимедийных пакетов. API MulticastChannel поддерживает как любой источник, так и конкретный источник multicast. Рассмотрите использование DatagramChannel для мультимедиа.

DatagramSocket можно использовать непосредственно для мультимедиа. Однако, в отличие от MulticastSocket, DatagramSocket не вызывает метод setReuseAddress(boolean) для включения параметра сокета SO_REUSEADDR по умолчанию. Если создается DatagramSocket для последующего присоединения к мультимедийной группе, вызывающий должен рассмотреть возможность явного включения параметра SO_REUSEADDR.

Экземпляр DatagramSocket может быть использован для отправки или получения мультимедийных пакетов данных. Необязательно присоединяться к мультимедийной группе для отправки мультимедийных пакетов. Однако перед отправкой мультимедийных пакетов данных необходимо предварительно настроить интерфейс отправки по умолчанию для мультимедийных пакетов данных с помощью setOption и StandardSocketOptions.IP_MULTICAST_IF:


    DatagramSocket sender = new DatagramSocket(new InetSocketAddress(0));
    NetworkInterface outgoingIf = NetworkInterface.getByName("en0");
    sender.setOption(StandardSocketOptions.IP_MULTICAST_IF, outgoingIf);

    // optionally configure multicast TTL; the TTL defines the scope of a
    // multicast datagram, for example, confining it to host local (0) or
    // link local (1) etc...
    int ttl = ...; // a number betwen 0 and 255
    sender.setOption(StandardSocketOptions.IP_MULTICAST_TTL, ttl);

    // send a packet to a multicast group
    byte[] msgBytes = ...;
    InetAddress mcastaddr = InetAddress.getByName("228.5.6.7");
    int port = 6789;
    InetSocketAddress dest = new InetSocketAddress(mcastaddr, port);
    DatagramPacket hi = new DatagramPacket(msgBytes, msgBytes.length, dest);
    sender.send(hi);
 

Экземпляр DatagramSocket также может быть использован для получения мультимедийных пакетов данных. DatagramSocket , созданный для приема мультимедийных пакетов, должен быть создан без привязки. Перед привязкой сокета должен быть настроен setReuseAddress(true):


    DatagramSocket socket = new DatagramSocket(null); // unbound
    socket.setReuseAddress(true); // set reuse address before binding
    socket.bind(new InetSocketAddress(6789)); // bind

    // joinGroup 228.5.6.7
    InetAddress mcastaddr = InetAddress.getByName("228.5.6.7");
    InetSocketAddress group = new InetSocketAddress(mcastaddr, 0);
    NetworkInterface netIf = NetworkInterface.getByName("en0");
    socket.joinGroup(group, netIf);
    byte[] msgBytes = new byte[1024]; // up to 1024 bytes
    DatagramPacket packet = new DatagramPacket(msgBytes, msgBytes.length);
    socket.receive(packet);
    ....
    // eventually leave group
    socket.leaveGroup(group, netIf);
 

Зависимости от платформы

Реализация мультимедиа предназначена для прямого отображения на встроенные средства мультимедиа. Следовательно, при разработке приложения, которое получает пакеты IP multicast, следует учитывать следующие моменты:

  1. В отличие от DatagramChannel, конструкторы DatagramSocket не позволяют указать ProtocolFamily базового сокета. Следовательно, семейство протоколов базового сокета может не соответствовать семейству протоколов мультимедийных групп, к которым DatagramSocket попытается присоединиться.
    Нет гарантии, что DatagramSocket с базовым сокетом, созданным в одном семействе протоколов, может присоединиться и получать пакеты multicast, когда адрес мультимедийной группы соответствует другому семейству протоколов. Например, если сокет IPv6 может присоединиться к мультимедийной группе IPv4 и получать пакеты, отправленные в группу, зависит от реализации.
  2. Перед присоединением к мультимедийной группе DatagramSocket должен быть привязан к адресному маске. Если сокет привязан к конкретному адресу, а не к адресному маске, то получение мультимедийных пакетов сокетом зависит от реализации.
  3. Параметр SO_REUSEADDR должен быть включен перед привязкой сокета. Это необходимо, чтобы разрешить нескольким участникам группы привязаться к одному адресу.
С:
1.0
См. также:
  • DatagramPacket
  • DatagramChannel

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

DatagramSocket()
DatagramSocket(int port)
DatagramSocket(int port, InetAddress laddr)
DatagramSocket(DatagramSocketImpl impl)
DatagramSocket(SocketAddress bindaddr)
Модификатор Конструктор Описание
Создаёт сокет дейтаграммы и привязывает его к любому доступному порту на локальном хосте.
Создаёт сокет дейтаграммы и привязывает его к указанному порту на локальном хосте.
Создаёт сокет дейтаграммы, привязанный к указанному локальному адресу.
protected
Создаёт не привязанный сокет дейтаграммы с указанным DatagramSocketImpl.
Создаёт сокет дейтаграммы, привязанный к указанному локальному адресу сокета.

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

Модификатор и тип Метод Описание
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 joinGroup(SocketAddress mcastaddr, NetworkInterface netIf)
Присоединяется к многоадресной группе.
void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)
Выходит из многоадресной группы на указанном локальном интерфейсе.
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()
Возвращает набор параметров сокета, поддерживаемых этим сокетом.

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

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

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

DatagramSocket

public DatagramSocket() throws SocketException
Создаёт сокет Datagram и связывает его с любым доступным портом на локальном хосте. Сокет будет привязан к адресу wildcard.

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

Исключение:
SocketException - если сокет не может быть открыт или привязан.
SecurityException - если менеджер безопасности существует, и его метод checkListen не разрешает операцию.
См. также:
  • SecurityManager.checkListen(int)

DatagramSocket

protected DatagramSocket(DatagramSocketImpl impl)
Создаёт несвязанный сокет Datagram с указанным DatagramSocketImpl.
Параметры:
impl - экземпляр DatagramSocketImpl, который подкласс хочет использовать в DatagramSocket.
С момента:
1.4

DatagramSocket

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

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

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

Параметры:
bindaddr - локальный адрес сокета для привязки, или null для несвязанного сокета.
Исключение:
SocketException - если сокет не может быть открыт или привязан к указанному локальному порту.
SecurityException - если менеджер безопасности существует, и его метод checkListen не разрешает операцию.
IllegalArgumentException - если bindaddr является подклассом SocketAddress, не поддерживаемым этим сокетом.
С момента:
1.4
См. также:
  • SecurityManager.checkListen(int)

DatagramSocket

public DatagramSocket(int port) throws SocketException
Создаёт сокет Datagram и связывает его с указанным портом на локальном хосте. Сокет будет привязан к адресу wildcard.

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

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

DatagramSocket

public DatagramSocket(int port, InetAddress laddr) throws SocketException
Создаёт сокет Datagram, привязанный к указанному локальному адресу.

Локальный порт должен быть в диапазоне от 0 до 65535 включительно. Номер порта zero позволит системе выбрать временный порт в операции bind.

Если IP-адрес является wildcard адресом или null, сокет будет привязан к адресу по умолчанию.

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

Параметры:
port - локальный порт для использования в операции привязки.
laddr - локальный адрес для привязки (может быть null)
Исключение:
SocketException - если сокет не может быть открыт или привязан к указанному локальному порту.
SecurityException - если менеджер безопасности существует, и его метод checkListen не разрешает операцию.
IllegalArgumentException - если порт находится вне допустимого диапазона.
С момента:
1.1
См. также:
  • SecurityManager.checkListen(int)

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

bind

public void bind(SocketAddress addr) throws SocketException
Привязывает этот DatagramSocket к определённому адресу и порту.

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

Параметры:
addr - адрес и порт для привязки.
Исключение:
SocketException - если произошла какая-либо ошибка во время привязки или сокет уже привязан.
SecurityException - если менеджер безопасности существует, и его метод checkListen не разрешает операцию.
IllegalArgumentException - если addr является подклассом SocketAddress, не поддерживаемым этим сокетом.
С момента:
1.4

connect

public void connect(InetAddress address, int port)
Подключает сокет к удалённому адресу для этого сокета. Когда сокет подключён к удалённому адресу, пакеты могут быть отправлены или получены только с этого адреса. По умолчанию сокет Datagram не подключен. Если сокет уже закрыт, этот метод не имеет эффекта.

Если сокет не привязан, этот метод сначала заставит сокет привязаться к автоматически назначенному адресу, как если бы был вызван метод bind с параметром null. Если удалённый пункт назначения, к которому подключен сокет, не существует или недоступен, и если для этого адреса был получен пакет ICMP destination unreachable, то последующий вызов send или receive может вызвать исключение PortUnreachableException. Обратите внимание, что нет гарантии, что исключение будет вызвано.

Если установлен менеджер безопасности, он вызывается для проверки доступа к удалённому адресу. В частности, если заданный address является multicast address, вызывается метод менеджера безопасности checkMulticast с заданным address. В противном случае вызываются методы менеджера безопасности checkConnect и checkAccept с заданным address и port, чтобы проверить, разрешено ли отправлять и получать пакеты соответственно.

Следует соблюдать осторожность, чтобы подключенный сокет Datagram не использовался с ненадежным кодом. Когда сокет подключён, receive и send не будут выполнять проверки безопасности входящих и исходящих пакетов, кроме соответствия адреса и порта пакета и сокета. При операции отправки, если адрес пакета установлен, и адрес пакета не соответствует адресу сокета, будет выброшено исключение IllegalArgumentException. Сокет, подключённый к многоадресной группе, может использоваться только для отправки пакетов. Пакеты в буфере приёма сокета, которые не были получены до вызова этого метода, могут быть удалены.

Параметры:
address - удалённый адрес для сокета
port - удалённый порт для сокета.
Исключение:
IllegalArgumentException - если адрес равен null или порт вне допустимого диапазона.
SecurityException - если менеджер безопасности установлен и не разрешает доступ к заданному удалённому адресу
UncheckedIOException - может быть выброшено, если соединение не удалось, например, если адрес назначения недоступен.
С момента:
1.2
См. также:
  • disconnect()

connect

public void connect(SocketAddress addr) throws SocketException
Подключает этот сокет к удалённому адресу сокета (IP-адрес + номер порта).

Если задан InetSocketAddress, этот метод работает так, как если бы вызывался connect(InetAddress,int) с заданными адресами IP и портом сокета, за исключением того, что SocketException, который может быть поднят, не заключён в UncheckedIOException. Пакеты в буфере приёма сокета, которые не были получены до вызова этого метода, могут быть удалены.

Параметры:
addr - удалённый адрес.
Исключение:
SocketException - если подключение не удалось
IllegalArgumentException - если addr равно null, или addr является подклассом SocketAddress, не поддерживаемым этим сокетом
SecurityException - если установлен менеджер безопасности и он не разрешает доступ к заданному удалённому адресу
С момента:
1.4

disconnect

public void disconnect()
Отключает сокет. Если сокет закрыт или не подключен, этот метод не оказывает никакого эффекта.
API Note:
Если этот метод выбрасывает UncheckedIOException, сокет может остаться в неопределённом состоянии. Настоятельно рекомендуется закрыть сокет, когда отключение завершается неудачей.
Throws:
UncheckedIOException - может быть выброшено, если отключение не удаётся разъединить ассоциацию и восстановить сокет в согласованном состоянии.
Since:
1.2
See Also:
  • connect(java.net.InetAddress, int)

isBound

public boolean isBound()
Возвращает состояние привязки сокета.

Если сокет был привязан до вызова closed, этот метод будет продолжать возвращать true после закрытия сокета.

Returns:
true, если сокет успешно привязан к адресу
Since:
1.4

isConnected

public boolean isConnected()
Возвращает состояние подключения сокета.

Если сокет был подключен до вызова closed, этот метод будет продолжать возвращать true после закрытия сокета.

Returns:
true, если сокет успешно подключен к серверу
Since:
1.4

getInetAddress

public InetAddress getInetAddress()
Возвращает адрес, к которому подключен этот сокет. Возвращает null если сокет не подключен.

Если сокет был подключен до вызова closed, этот метод будет продолжать возвращать подключённый адрес после закрытия сокета.

Returns:
адрес, к которому подключен этот сокет.
Since:
1.2

getPort

public int getPort()
Возвращает номер порта, к которому подключен этот сокет. Возвращает -1 если сокет не подключен.

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

Returns:
номер порта, к которому подключен этот сокет.
Since:
1.2

getRemoteSocketAddress

public SocketAddress getRemoteSocketAddress()
Возвращает адрес конечной точки, к которой подключен этот сокет, или null если он не подключен.

Если сокет был подключен до вызова closed, этот метод будет продолжать возвращать подключённый адрес после закрытия сокета.

Returns:
объект SocketAddress , представляющий удалённую конечную точку этого сокета, или null если он ещё не подключен.
Since:
1.4
See Also:
  • getInetAddress()
  • getPort()
  • connect(SocketAddress)

getLocalSocketAddress

public SocketAddress getLocalSocketAddress()
Возвращает адрес конечной точки, к которой привязан этот сокет.
Returns:
объект SocketAddress , представляющий локальную конечную точку этого сокета, или null если он закрыт или ещё не привязан.
Since:
1.4
See Also:
  • getLocalAddress()
  • getLocalPort()
  • bind(SocketAddress)

send

public void send(DatagramPacket p) throws IOException
Отправляет пакет датаграммы из этого сокета. DatagramPacket содержит информацию, указывающую на данные для отправки, их длину, IP-адрес удалённого хоста и номер порта на удалённом хосте.

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

Parameters:
p - отправляемый DatagramPacket.
Throws:
IOException - если произошла ошибка ввода-вывода.
SecurityException - если существует менеджер безопасности, и его метод checkMulticast или checkConnect не разрешает отправку.
PortUnreachableException - может быть выброшено, если сокет подключен к в настоящее время недоступному пункту назначения. Нет гарантий, что исключение будет выброшено.
IllegalBlockingModeException - если у этого сокета есть связанный канал, и канал находится в режиме без блокировки.
IllegalArgumentException - если сокет подключён, и адреса подключения и пакета отличаются, или если сокет не подключен, и адрес пакета не задан, или его порт не входит в допустимый диапазон.
See Also:
  • DatagramPacket
  • SecurityManager.checkMulticast(InetAddress)
  • SecurityManager.checkConnect(java.lang.String, int)

receive

public void receive(DatagramPacket p) throws IOException
Принимает пакет датаграммы из этого сокета. По возвращении этого метода буфер DatagramPacket заполняется полученными данными. Пакет датаграммы также содержит IP-адрес отправителя и номер порта на машине отправителя.

Этот метод блокируется до тех пор, пока не будет получена датаграмма. Поле length объекта пакета датаграммы содержит длину полученного сообщения. Если сообщение длиннее, чем длина пакета, сообщение усекается.

Если есть менеджер безопасности, и сокет в данный момент не подключен к удалённому адресу, пакет не может быть принят, если метод менеджера безопасности checkAccept не разрешает это. Датаграммы, не разрешённые менеджером безопасности, молча игнорируются.

Parameters:
p - DatagramPacket для размещения входящих данных.
Throws:
IOException - если произошла ошибка ввода-вывода.
SocketTimeoutException - если ранее был вызван setSoTimeout и истекло время ожидания.
PortUnreachableException - может быть выброшено, если сокет подключен к в настоящее время недоступному пункту назначения. Нет гарантий, что исключение будет выброшено.
IllegalBlockingModeException - если у этого сокета есть связанный канал, и канал находится в режиме без блокировки.
See Also:
  • DatagramPacket
  • DatagramSocket

getLocalAddress

public InetAddress getLocalAddress()
Получает локальный адрес, к которому привязан сокет.

Если есть менеджер безопасности, его метод checkConnect сначала вызывается с адресом хоста и -1 в качестве аргументов, чтобы определить, разрешена ли операция.

Returns:
локальный адрес, к которому привязан сокет, null если сокет закрыт, или InetAddress , представляющий wildcard адрес, если сокет не привязан или метод менеджера безопасности checkConnect не разрешает операцию
Since:
1.1
See Also:
  • SecurityManager.checkConnect(java.lang.String, int)

getLocalPort

public int getLocalPort()
Возвращает номер порта на локальном хосте, к которому привязан этот сокет.
Returns:
номер порта на локальном хосте, к которому привязан этот сокет, -1 если сокет закрыт, или 0 если он ещё не привязан.

setSoTimeout

public void setSoTimeout(int timeout) throws SocketException
Включает/выключает SO_TIMEOUT с указанным временем ожидания в миллисекундах. Если этот параметр установлен на положительное значение, вызов receive() для этого DatagramSocket будет блокироваться только на это количество времени. Если время ожидания истечёт, генерируется исключение java.net.SocketTimeoutException, хотя DatagramSocket остаётся валидным. Время ожидания 0 интерпретируется как бесконечное время ожидания. Параметр должен быть включён до начала блокирующей операции, чтобы он имел эффект.
Parameters:
timeout - заданное время ожидания в миллисекундах.
Throws:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
IllegalArgumentException - если timeout отрицательно.
Since:
1.1
See Also:
  • getSoTimeout()

getSoTimeout

public int getSoTimeout() throws SocketException
Получить значение SO_TIMEOUT. 0 означает, что параметр отключён (т.е. время ожидания бесконечно).
Returns:
значение SO_TIMEOUT
Throws:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
Since:
1.1
See Also:
  • setSoTimeout(int)

Установить размер буфера отправки

public void setSendBufferSize(int size) throws SocketException
Устанавливает опцию SO_SNDBUF для этого DatagramSocket. Опция SO_SNDBUF используется сетевой реализацией в качестве подсказки для определения размера буферов сетевого ввода-вывода. Значение SO_SNDBUF также может использоваться сетевой реализацией для определения максимального размера пакета, который может быть отправлен по этому сокету.

Поскольку SO_SNDBUF является подсказкой, приложения, которые хотят проверить, какого размера буфер, должны вызвать getSendBufferSize().

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

Примечание: Если send(DatagramPacket) используется для отправки DatagramPacket, размер которого больше, чем значение SO_SNDBUF, то зависит от реализации, будет ли пакет отправлен или отброшен.

Примечание API:
Если size > 0, этот метод эквивалентен вызову setOption(StandardSocketOptions.SO_SNDBUF, size).
Параметры:
size - размер, на который нужно установить размер буфера отправки в байтах. Это значение должно быть больше 0.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
IllegalArgumentException - если значение равно 0 или отрицательно.
С:
1.2
См. также:
  • getSendBufferSize()
  • StandardSocketOptions.SO_SNDBUF

Получить размер буфера отправки

public int getSendBufferSize() throws SocketException
Получить значение опции SO_SNDBUF для этого DatagramSocket, то есть размер буфера в байтах, используемый платформой для вывода на этот DatagramSocket.
Примечание API:
Этот метод эквивалентен вызову getOption(StandardSocketOptions.SO_SNDBUF).
Возвращает:
значение опции SO_SNDBUF для этого DatagramSocket.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
С:
1.2
См. также:
  • setSendBufferSize(int)
  • StandardSocketOptions.SO_SNDBUF

Установить размер буфера приема

public void setReceiveBufferSize(int size) throws SocketException
Устанавливает опцию SO_RCVBUF для этого DatagramSocket. Опция SO_RCVBUF используется сетевой реализацией в качестве подсказки для определения размера буферов сетевого ввода-вывода. Значение SO_RCVBUF также может использоваться сетевой реализацией для определения максимального размера пакета, который может быть получен по этому сокету.

Поскольку SO_RCVBUF является подсказкой, приложения, которые хотят проверить, какого размера буферы были установлены, должны вызвать getReceiveBufferSize().

Увеличение SO_RCVBUF может позволить сетевой реализации буферизовать несколько пакетов, когда пакеты прибывают быстрее, чем их принимают, используя receive(DatagramPacket).

Примечание: Зависит от реализации, может ли быть получен пакет, размер которого больше, чем SO_RCVBUF.

Примечание API:
Если size > 0, этот метод эквивалентен вызову setOption(StandardSocketOptions.SO_RCVBUF, size).
Параметры:
size - размер, на который нужно установить размер буфера приема в байтах. Это значение должно быть больше 0.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
IllegalArgumentException - если значение равно 0 или отрицательно.
С:
1.2
См. также:
  • getReceiveBufferSize()
  • StandardSocketOptions.SO_RCVBUF

Получить размер буфера приема

public int getReceiveBufferSize() throws SocketException
Получить значение опции SO_RCVBUF для этого DatagramSocket, то есть размер буфера в байтах, используемый платформой для ввода на этот DatagramSocket.
Примечание API:
Этот метод эквивалентен вызову getOption(StandardSocketOptions.SO_RCVBUF).
Возвращает:
значение опции SO_RCVBUF для этого DatagramSocket
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
С:
1.2
См. также:
  • setReceiveBufferSize(int)
  • StandardSocketOptions.SO_RCVBUF

Установить повторное использование адреса

public void setReuseAddress(boolean on) throws SocketException
Включает/отключает опцию сокета SO_REUSEADDR.

Для UDP-сокетов может потребоваться привязать более одного сокета к одному и тому же адресу сокета. Это обычно делается для приема мультимедийных пакетов (см. MulticastSocket). Опция сокета SO_REUSEADDR позволяет нескольким сокетам быть привязанными к одному и тому же адресу сокета, если опция сокета SO_REUSEADDR включена перед привязкой сокета с помощью bind(SocketAddress).

Примечание: Эта функциональность не поддерживается всеми платформами, поэтому зависит от реализации, будет ли эта опция игнорироваться или нет. Однако если она не поддерживается, getReuseAddress() всегда вернет false.

При создании сокета DatagramSocket начальное значение SO_REUSEADDR выключено.

Поведение при включении или отключении SO_REUSEADDR после привязки сокета (см. isBound()) не определено.

Примечание API:
Этот метод эквивалентен вызову setOption(StandardSocketOptions.SO_REUSEADDR, on).
Параметры:
on - включить или отключить
Исключения:
SocketException - если возникла ошибка при включении или отключении опции сокета SO_REUSEADDR, или сокет закрыт.
С:
1.4
См. также:
  • getReuseAddress()
  • bind(SocketAddress)
  • isBound()
  • isClosed()
  • StandardSocketOptions.SO_REUSEADDR

Получить повторное использование адреса

public boolean getReuseAddress() throws SocketException
Проверяет, включена ли опция SO_REUSEADDR.
Примечание API:
Этот метод эквивалентен вызову getOption(StandardSocketOptions.SO_REUSEADDR).
Возвращает:
значение, указывающее, включена ли опция SO_REUSEADDR.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
С:
1.4
См. также:
  • setReuseAddress(boolean)
  • StandardSocketOptions.SO_REUSEADDR

Установить режим широковещания

public void setBroadcast(boolean on) throws SocketException
Включает/отключает SO_BROADCAST.

Некоторые операционные системы могут потребовать, чтобы виртуальная машина Java запускалась с реализуемыми привилегиями, чтобы включить эту опцию или отправлять широковещательные пакеты.

Примечание API:
Этот метод эквивалентен вызову setOption(StandardSocketOptions.SO_BROADCAST, on).
Параметры:
on - включить или выключить широковещательный режим.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
С:
1.4
См. также:
  • getBroadcast()
  • StandardSocketOptions.SO_BROADCAST

Получить режим широковещания

public boolean getBroadcast() throws SocketException
Проверяет, включен ли SO_BROADCAST.
Примечание API:
Этот метод эквивалентен вызову getOption(StandardSocketOptions.SO_BROADCAST).
Возвращает:
значение, указывающее, включен ли SO_BROADCAST.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
С:
1.4
См. также:
  • setBroadcast(boolean)
  • StandardSocketOptions.SO_BROADCAST
END_OF_DOCUMENT_MARKER

setTrafficClass

public void setTrafficClass(int tc) throws SocketException
Устанавливает класс трафика или байт типа обслуживания в заголовке IP-датаграммы для датаграмм, отправленных из этого объекта DatagramSocket. Поскольку реализация базовой сети может игнорировать это значение, приложения должны рассматривать его как подсказку.

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

Примечания:

Для Интернет-протокола версии 4 значение состоит из integer, наименее значимые 8 битов которого представляют значение байта TOS в IP-пакетах, отправленных сокетом. RFC 1349 определяет значения TOS следующим образом:

  • IPTOS_LOWCOST (0x02)
  • IPTOS_RELIABILITY (0x04)
  • IPTOS_THROUGHPUT (0x08)
  • IPTOS_LOWDELAY (0x10)
Последний бит младшего разряда всегда игнорируется, так как это соответствует биту MBZ (должен быть нулём).

Установка битов в поле приоритета может привести к исключению SocketException, указывающему на то, что операция запрещена.

для Интернет-протокола версии 6 tc — это значение, которое будет помещено в поле sin6_flowinfo заголовка IP.

Примечание API:
Этот метод эквивалентен вызову setOption(StandardSocketOptions.IP_TOS, tc).
Параметры:
tc - значение int для набора битов.
Исключения:
SocketException - если произошла ошибка при установке класса трафика или байта типа обслуживания
С:
1.4
См. также:
  • getTrafficClass()
  • StandardSocketOptions.IP_TOS

getTrafficClass

public int getTrafficClass() throws SocketException
Возвращает класс трафика или байт типа обслуживания в заголовке IP-датаграммы для пакетов, отправленных из этого объекта DatagramSocket.

Поскольку реализация базовой сети может игнорировать класс трафика или байт типа обслуживания, установленный с помощью setTrafficClass(int), этот метод может возвращать значение, отличное от ранее установленного с помощью метода setTrafficClass(int) в этом объекте DatagramSocket.

Примечание API:
Этот метод эквивалентен вызову getOption(StandardSocketOptions.IP_TOS).
Возвращает:
установленный класс трафика или байт типа обслуживания
Исключения:
SocketException - если произошла ошибка при получении значения класса трафика или байта типа обслуживания.
С:
1.4
См. также:
  • setTrafficClass(int)
  • StandardSocketOptions.IP_TOS

close

public void close()
Закрывает этот сокет датаграммы.

Любой поток, который в настоящее время заблокирован в receive(java.net.DatagramPacket) в этом сокете, выбросит SocketException.

Если у этого сокета есть связанный канал, то канал также закрывается.

Указано в:
close в интерфейсе AutoCloseable
Указано в:
close в интерфейсе Closeable

isClosed

public boolean isClosed()
Возвращает, закрыт ли сокет.
Возвращает:
true, если сокет закрыт
С:
1.4

getChannel

public DatagramChannel getChannel()
Возвращает уникальный объект DatagramChannel, связанный с этим сокетом датаграммы, если таковой имеется.

У сокета датаграммы будет канал только в том случае, если сам канал был создан с помощью метода DatagramChannel.open.

Возвращает:
канал датаграмм, связанный с этим сокетом датаграмм, или null , если этот сокет не был создан для канала
С:
1.4

setDatagramSocketImplFactory

@Deprecated(since="17") public static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac) throws IOException
Устарело.
Используйте DatagramChannel или наследуйте от DatagramSocket напрямую.
Этот метод в ранних версиях JDK предоставлял возможность заменить системную реализацию DatagramSocket. Он в основном устарел с Java 1.4. Если необходимо, можно создать DatagramSocket для использования пользовательской реализации, расширив DatagramSocket и используя защищённый конструктор, принимающий реализацию в качестве параметра.
Устанавливает фабрику реализации сокета датаграмм для приложения. Фабрику можно указать только один раз.

При создании нового сокета датаграмм приложением вызывается метод createDatagramSocketImpl фабрики реализации сокета для создания фактической реализации сокета датаграмм.

Передача null в метод является пустой операцией, если фабрика ещё не была установлена.

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

Параметры:
fac - требуемая фабрика.
Исключения:
IOException - если произошла ошибка ввода-вывода при установке фабрики сокета датаграмм.
SocketException - если фабрика уже определена.
SecurityException - если менеджер безопасности существует и его метод checkSetFactory не разрешает операцию.
С:
1.3
См. также:
  • DatagramSocketImplFactory.createDatagramSocketImpl()
  • SecurityManager.checkSetFactory()

setOption

public <T> DatagramSocket setOption(SocketOption<T> name, T value) throws IOException
Устанавливает значение параметра сокета.
Параметры типа:
T - Тип значения параметра сокета
Параметры:
name - Параметр сокета
value - Значение параметра сокета. Значение null может быть допустимым для некоторых параметров.
Возвращает:
этот объект DatagramSocket
Исключения:
UnsupportedOperationException - если сокет датаграмм не поддерживает параметр.
IllegalArgumentException - если значение не является допустимым для параметра.
IOException - если произошла ошибка ввода-вывода или сокет закрыт.
SecurityException - если установлен менеджер безопасности и если параметр сокета требует разрешения на безопасность, и у вызывающего объекта нет необходимого разрешения. StandardSocketOptions не требуют какого-либо разрешения на безопасность.
NullPointerException - если имя является null
С:
9

getOption

public <T> T getOption(SocketOption<T> name) throws IOException
Возвращает значение параметра сокета.
Параметры типа:
T - Тип значения параметра сокета
Параметры:
name - Параметр сокета
Возвращает:
Значение параметра сокета.
Исключения:
UnsupportedOperationException - если сокет датаграмм не поддерживает параметр.
IOException - если произошла ошибка ввода-вывода или сокет закрыт.
NullPointerException - если имя является null
SecurityException - если установлен менеджер безопасности и если параметр сокета требует разрешения на безопасность, и у вызывающего объекта нет необходимого разрешения. StandardSocketOptions не требуют какого-либо разрешения на безопасность.
С:
9

supportedOptions

public Set<SocketOption<?>> supportedOptions()
Возвращает набор параметров сокета, поддерживаемых этим сокетом. Этот метод продолжит возвращать набор параметров даже после закрытия сокета.
Возвращает:
Набор параметров сокета, поддерживаемых этим сокетом. Этот набор может быть пустым, если DatagramSocketImpl сокета не может быть создан.
С:
9

joinGroup

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

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

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

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

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

Примечание API:
Интерфейс по умолчанию для отправки исходящих пакетов многоадресной рассылки можно настроить с помощью setOption(SocketOption, Object) с опцией StandardSocketOptions.IP_MULTICAST_IF.
Параметры:
mcastaddr - указывает адрес многоадресной рассылки для присоединения.
netIf - указывает локальный интерфейс для приема пакетов многоадресной рассылки или null.
Исключения:
IOException - если произошла ошибка присоединения, или адрес не является адресом многоадресной рассылки, или платформа не поддерживает многоадресную рассылку
SecurityException - если менеджер безопасности существует и его метод checkMulticast не разрешает присоединение.
IllegalArgumentException - если mcastaddr — null или является подклассом SocketAddress, не поддерживаемым этим сокетом
С тех пор:
17
См. также:
  • SecurityManager.checkMulticast(InetAddress)
  • MulticastChannel.join(InetAddress, NetworkInterface)
  • StandardSocketOptions.IP_MULTICAST_IF

leaveGroup

public void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
Выходит из группы многоадресной рассылки на указанном локальном интерфейсе.

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

Примечание API:
Аргументы mcastaddr и netIf должны идентифицировать группу многоадресной рассылки, к которой ранее присоединился этот DatagramSocket.

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

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

© 1993, 2021, 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/17/docs/api/java.base/java/net/DatagramSocket.html

Spec-Zone.ru

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