Класс 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.
- С:
- 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() | Возвращает уникальный объект |
InetAddress | getInetAddress() | Возвращает адрес, к которому подключён этот сокет. |
InetAddress | getLocalAddress() | Получает локальный адрес, к которому привязан сокет. |
int | getLocalPort() | Возвращает номер порта на локальном компьютере, к которому привязан этот сокет. |
SocketAddress | getLocalSocketAddress() | Возвращает адрес конечной точки, к которой привязан этот сокет. |
<T> T | getOption(SocketOption<T> name) | Возвращает значение параметра сокета. |
int | getPort() | Возвращает номер порта, к которому подключён этот сокет. |
int | getReceiveBufferSize() | Получает значение параметра SO_RCVBUF для этого |
SocketAddress | getRemoteSocketAddress() | Возвращает адрес конечной точки, к которой подключён этот сокет, или |
boolean | getReuseAddress() | Проверяет, включён ли параметр SO_REUSEADDR. |
int | getSendBufferSize() | Получает значение параметра SO_SNDBUF для этого |
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 в указанное значение для этого |
void | setReuseAddress(boolean on) | Включает/отключает параметр сокета SO_REUSEADDR. |
void | setSendBufferSize(int size) | Устанавливает параметр SO_SNDBUF в указанное значение для этого |
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)
Установка битов в поле приоритета может привести к 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