Spec-Zone.ru › OpenJDK 21

Класс 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) в заголовке Интернет-протокола (IP)

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

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

DatagramChannel реализует интерфейс MulticastChannel и предоставляет альтернативный API для отправки и получения мультиадресных пакетов данных. API MulticastChannel поддерживает как любой источник, так и специфический источник мультиадресации. Рассмотрите использование 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 between 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, следует учитывать следующие моменты:

  1. В отличие от DatagramChannel, конструкторы DatagramSocket не позволяют указать ProtocolFamily базового сокета. Вследствие этого, семейство протоколов базового сокета может не соответствовать семейству протоколов мультиадресных групп, к которым DatagramSocket попытается присоединиться.
    Нет гарантии, что DatagramSocket с базовым сокетом, созданным в одном семействе протоколов, сможет присоединиться и получить мультиадресные пакеты, когда адрес мультиадресной группы соответствует другому семейству протоколов. Например, зависит от реализации, сможет ли DatagramSocket к 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 с сообщением о недоступности пункта назначения, то последующий вызов 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
Отправляет пакет datagram из этого сокета. DatagramPacket содержит информацию об отправляемых данных, их длине, IP-адресе удалённого хоста и номере порта на удалённом хосте.

Если существует менеджер безопасности, и сокет в данный момент не подключён к удалённому адресу, этот метод сначала выполняет некоторые проверки безопасности. Во-первых, если p.getAddress().isMulticastAddress() равно true, этот метод вызывает метод 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
Принимает пакет datagram из этого сокета. Этот метод блокируется до тех пор, пока не будет получен datagram. Когда этот метод возвращается, буфер DatagramPacket заполняется полученными данными. Пакет datagram также содержит IP-адрес отправителя и номер порта на машине отправителя. Поле length объекта пакета datagram содержит длину принятого сообщения. Если сообщение длиннее, чем длина пакета, сообщение усекается.

Этот метод прерываем в следующих случаях:

  1. Сокет datagram связан с DatagramChannel. В этом случае прерывание потока, принимающего пакет datagram, закроет базовый канал и заставит этот метод выбросить ClosedByInterruptException со статусом прерывания.
  2. Сокет datagram использует реализацию сокета по умолчанию и виртуальный поток принимает пакет datagram. В этом случае прерывание виртуального потока заставит его проснуться и закрыть сокет. Затем этот метод выбросит SocketException со статусом прерывания.

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

setSendBufferSize

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

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

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

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

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

getSendBufferSize

public int getSendBufferSize() throws SocketException
Получение значения параметра SO_SNDBUF для этого DatagramSocket, то есть размера буфера в байтах, используемого платформой для вывода в этом DatagramSocket.
API Note:
Этот метод эквивалентен вызову getOption(StandardSocketOptions.SO_SNDBUF).
Returns:
значение параметра SO_SNDBUF для данного DatagramSocket
Throws:
SocketException - если возникла ошибка в базовом протоколе, например, ошибка UDP.
Since:
1.2
See Also:
  • setSendBufferSize(int)
  • StandardSocketOptions.SO_SNDBUF

setReceiveBufferSize

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

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

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

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

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

getReceiveBufferSize

public int getReceiveBufferSize() throws SocketException
Получение значения параметра SO_RCVBUF для этого DatagramSocket, то есть размера буфера в байтах, используемого платформой для ввода в этот DatagramSocket.
API Note:
Этот метод эквивалентен вызову getOption(StandardSocketOptions.SO_RCVBUF).
Returns:
значение параметра SO_RCVBUF для данного DatagramSocket
Throws:
SocketException - если возникла ошибка в базовом протоколе, например, ошибка UDP.
Since:
1.2
See Also:
  • setReceiveBufferSize(int)
  • StandardSocketOptions.SO_RCVBUF

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

API Note:
Этот метод эквивалентен вызову setOption(StandardSocketOptions.SO_REUSEADDR, on).
Parameters:
on - включить или отключить
Throws:
SocketException - если при включении или отключении параметра сокета SO_REUSEADDR возникла ошибка, или сокет закрыт.
Since:
1.4
See Also:
  • getReuseAddress()
  • bind(SocketAddress)
  • isBound()
  • isClosed()
  • StandardSocketOptions.SO_REUSEADDR

getReuseAddress

public boolean getReuseAddress() throws SocketException
Проверяет, включён ли SO_REUSEADDR.
API Note:
Этот метод эквивалентен вызову getOption(StandardSocketOptions.SO_REUSEADDR).
Returns:
значение boolean, указывающее, включён ли SO_REUSEADDR.
Throws:
SocketException - если возникла ошибка в базовом протоколе, например, ошибка UDP.
Since:
1.4
See Also:
  • setReuseAddress(boolean)
  • StandardSocketOptions.SO_REUSEADDR

setBroadcast

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

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

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

getBroadcast

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

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 Note:
Этот метод эквивалентен вызову setOption(StandardSocketOptions.IP_TOS, tc).
Параметры:
tc - значение int для битовой комбинации.
Издает:
SocketException - если при установке класса трафика или типа обслуживания возникла ошибка.
Since:
1.4
См. также:
  • getTrafficClass()
  • StandardSocketOptions.IP_TOS

getTrafficClass

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

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

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

close

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

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

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

Specified by:
close в интерфейсе AutoCloseable
Specified by:
close в интерфейсе Closeable

isClosed

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

getChannel

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

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

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

setDatagramSocketImplFactory

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

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

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

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

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

setOption

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

getOption

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

supportedOptions

public Set<SocketOption<?>> supportedOptions()
Возвращает набор поддерживаемых параметром сокета. Этот метод будет продолжать возвращать набор параметров даже после закрытия сокета.
Возвращает:
Набор поддерживаемых параметром сокета. Этот набор может быть пустым, если реализация DatagramSocketImpl сокета создать нельзя.
Since:
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, 2023, 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/21/docs/api/java.base/java/net/DatagramSocket.html

Spec-Zone.ru

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