Класс 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.

С:
1.0
См. также:
DatagramPacket, DatagramChannel

Конструкторы

Модификатор Конструктор Описание
DatagramSocket()

Создаёт сокет данных и привязывает его к любому доступному порту на локальном компьютере.

DatagramSocket​(int port)

Создаёт сокет данных и привязывает его к указанному порту на локальном компьютере.

DatagramSocket​(int port, InetAddress laddr)

Создаёт сокет данных, привязанный к указанному локальному адресу.

protected DatagramSocket​(DatagramSocketImpl impl)

Создаёт не привязанный сокет данных с указанным DatagramSocketImpl.

DatagramSocket​(SocketAddress bindaddr)

Создаёт сокет данных, привязанный к указанному локальному адресу сокета.

Методы

Модификатор и тип Метод Описание
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)

Устанавливает фабрику реализации сокета 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

Создаёт сокет для работы с датаграммами и привязывает его к любому доступному порту на локальном хосте. Сокет будет привязан к адресу wildcard, IP-адресу, выбранному ядром.

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

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

DatagramSocket

protected DatagramSocket(DatagramSocketImpl impl)

Создаёт развязанный сокет для работы с датаграммами с указанным DatagramSocketImpl.

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

DatagramSocket

public DatagramSocket(SocketAddress bindaddr)
               throws SocketException

Создаёт сокет для работы с датаграммами, привязанный к указанному локальному адресу сокета.

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

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

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

DatagramSocket

public DatagramSocket(int port)
               throws SocketException

Создаёт сокет для работы с датаграммами и привязывает его к указанному порту на локальном хосте. Сокет будет привязан к адресу wildcard, IP-адресу, выбранному ядром.

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

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

DatagramSocket

public DatagramSocket(int port,
                      InetAddress laddr)
               throws SocketException

Создаёт сокет для работы с датаграммами, привязанный к указанному локальному адресу. Локальный порт должен быть в диапазоне от 0 до 65535 включительно. Если IP-адрес равен 0.0.0.0, сокет будет привязан к адресу wildcard, IP-адресу, выбранному ядром.

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

Параметры:
port - используемый локальный порт
laddr - локальный адрес для привязки
Исключения:
SocketException - если сокет не может быть открыт или сокет не может быть привязан к указанному локальному порту.
SecurityException - если менеджер безопасности существует и его метод checkListen не разрешает операцию.
С тех пор:
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 не подключён.

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

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

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

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

connect

public void connect(SocketAddress addr)
             throws SocketException

Подключает этот сокет к удалённому адресу сокета (IP-адрес + номер порта).

Если задан InetSocketAddress, этот метод работает так, как будто вызывается connect(InetAddress,int) с IP-адресом и номером порта заданных адресов сокета.

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

disconnect

public void disconnect()

Отключает сокет. Если сокет закрыт или не подключён, этот метод не имеет эффекта.

См. также:
connect(java.net.InetAddress, int)

isBound

public boolean isBound()

Возвращает состояние привязки сокета.

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

Возвращает:
true, если сокет успешно привязан к адресу
С тех пор:
1.4

isConnected

public boolean isConnected()

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

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

Возвращает:
true, если сокет успешно подключён к серверу
С тех пор:
1.4

getInetAddress

public InetAddress getInetAddress()

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

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

Возвращает:
адрес, к которому подключён этот сокет.

getPort

public int getPort()

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

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

Возвращает:
номер порта, к которому подключён этот сокет.

getRemoteSocketAddress

public SocketAddress getRemoteSocketAddress()

Возвращает адрес конечной точки, к которой подключён этот сокет, или null если он не подключён.

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

Возвращает:
SocketAddress представляющий удалённую конечную точку этого сокета, или null если он ещё не подключён.
С тех пор:
1.4
См. также:
getInetAddress(), getPort(), connect(SocketAddress)

getLocalSocketAddress

public SocketAddress getLocalSocketAddress()

Возвращает адрес конечной точки, к которой привязан этот сокет.

Возвращает:
SocketAddress представляющий локальную конечную точку этого сокета, или null если он закрыт или ещё не привязан.
С тех пор:
1.4
См. также:
getLocalAddress(), getLocalPort(), bind(SocketAddress)

send

public void send(DatagramPacket p)
          throws IOException

Отправляет пакет datagram из этого сокета. DatagramPacket содержит информацию, указывающую на отправляемые данные, их длину, IP-адрес удалённого хоста и номер порта на удалённом хосте.

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

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

receive

public void receive(DatagramPacket p)
             throws IOException

Принимает пакет datagram из этого сокета. По возвращении этого метода буфер DatagramPacket заполняется полученными данными. Пакет datagram также содержит IP-адрес отправителя и номер порта на машине отправителя.

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

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

Параметры:
p - DatagramPacket для размещения входящих данных.
Исключения:
IOException - если произошла ошибка ввода-вывода.
SocketTimeoutException - если ранее был вызван метод setSoTimeout, и таймаут истек.
PortUnreachableException - может быть выброшено, если сокет подключён к недоступному в настоящий момент пункту назначения. Заметьте, нет гарантии, что исключение будет выброшено.
IllegalBlockingModeException - если у этого сокета есть связанный канал, и канал находится в режиме без ожидания.
См. также:
DatagramPacket, DatagramSocket

getLocalAddress

public InetAddress getLocalAddress()

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

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

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

getLocalPort

public int getLocalPort()

Возвращает номер порта на локальном хосте, к которому привязан этот сокет.

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

setSoTimeout

public void setSoTimeout(int timeout)
                  throws SocketException

Включает/выключает SO_TIMEOUT с указанным таймаутом в миллисекундах. Если этот параметр установлен на ненулевое значение таймаута, вызов receive() для этого DatagramSocket будет блокироваться только на это время. Если таймаут истекает, возникает исключение java.net.SocketTimeoutException, хотя DatagramSocket остается валидным. Параметр обязательно должен быть включен перед входом в блокирующую операцию, чтобы он действовал. Таймаут должен быть > 0. Таймаут 0 интерпретируется как бесконечный таймаут.

Параметры:
timeout - указанный таймаут в миллисекундах.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
С:
1.1
См. также:
getSoTimeout()

getSoTimeout

public int getSoTimeout()
                 throws SocketException

Получить значение настройки SO_TIMEOUT. 0 возвращает, если параметр отключен (т.е. таймаут бесконечен).

Возвращает:
значение настройки SO_TIMEOUT
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
С:
1.1
См. также:
setSoTimeout(int)

setSendBufferSize

public void setSendBufferSize(int size)
                       throws SocketException

Устанавливает параметр SO_SNDBUF для этого DatagramSocket в указанное значение. Параметр SO_SNDBUF используется реализацией сети в качестве подсказки для задания размера буферов сетевого ввода-вывода. Настройка SO_SNDBUF также может использоваться реализацией сети для определения максимального размера пакета, который может быть отправлен по этому сокету.

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

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

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

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

getSendBufferSize

public int getSendBufferSize()
                      throws SocketException

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

Возвращает:
значение параметра SO_SNDBUF для этого DatagramSocket
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
См. также:
setSendBufferSize(int)

setReceiveBufferSize

public void setReceiveBufferSize(int size)
                          throws SocketException

Устанавливает параметр SO_RCVBUF для этого DatagramSocket в указанное значение. Параметр SO_RCVBUF используется реализацией сети в качестве подсказки для задания размера буферов сетевого ввода-вывода. Настройка SO_RCVBUF также может использоваться реализацией сети для определения максимального размера пакета, который может быть получен по этому сокету.

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

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

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

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

getReceiveBufferSize

public int getReceiveBufferSize()
                         throws SocketException

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

Возвращает:
значение параметра SO_RCVBUF для этого DatagramSocket
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
См. также:
setReceiveBufferSize(int)

setReuseAddress

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()) не определено.

Параметры:
on - включить или отключить
Исключения:
SocketException - если произошла ошибка при включении или отключении параметра сокета SO_RESUEADDR, или сокет закрыт.
С:
1.4
См. также:
getReuseAddress(), bind(SocketAddress), isBound(), isClosed()

getReuseAddress

public boolean getReuseAddress()
                        throws SocketException

Проверяет, включен ли SO_REUSEADDR.

Возвращает:
значение, указывающее, включен ли SO_REUSEADDR.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
С:
1.4
См. также:
setReuseAddress(boolean)

setBroadcast

public void setBroadcast(boolean on)
                  throws SocketException

Включает/отключает SO_BROADCAST.

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

Параметры:
on - включить или отключить широковещание.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
С:
1.4
См. также:
getBroadcast()

getBroadcast

public boolean getBroadcast()
                     throws SocketException

Проверяет, включен ли SO_BROADCAST.

Возвращает:
значение, указывающее, включен ли SO_BROADCAST.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка UDP.
С:
1.4
См. также:
setBroadcast(boolean)

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.

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

getTrafficClass

public int getTrafficClass()
                    throws SocketException

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

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

Возвращает:
класс трафика или тип обслуживания, уже установленный
Выбрасывает:
SocketException - если произошла ошибка при получении значения класса трафика или типа обслуживания.
С тех пор:
1.4
См. также:
setTrafficClass(int)

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

public static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac)
                                         throws IOException

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

Когда приложение создает новый сокет дейтаграммы, вызывается метод 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.
Возвращает:
this 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

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/DatagramSocket.html

Spec-Zone .ru
спецификации, руководства, описания, API