Spec-Zone.ru › OpenJDK 21

Класс Socket

java.lang.Object
java.net.Socket
Все реализованные интерфейсы:
Closeable, AutoCloseable
Прямые известные подклассы:
SSLSocket
public class Socket extends Object implements Closeable
Этот класс реализует клиентские сокеты (также называемые просто "сокетами"). Сокет — это конечная точка для связи между двумя машинами.

Фактическая работа сокета выполняется экземпляром класса SocketImpl.

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

Параметры сокета
Название параметра Описание
SO_SNDBUF Размер буфера отправки сокета
SO_RCVBUF Размер буфера приема сокета
SO_KEEPALIVE Поддерживать соединение активным
SO_REUSEADDR Повторное использование адреса
SO_LINGER Задержка при закрытии, если данные присутствуют (только при работе в блокирующем режиме)
TCP_NODELAY Отключить алгоритм Nagle
Также могут поддерживаться дополнительные (специфичные для реализации) параметры.
С:
1.0
См. также:
  • SocketImpl
  • SocketChannel

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

Socket()
Socket(String host, int port)
Socket(String host, int port, boolean stream)
Socket(String host, int port, InetAddress localAddr, int localPort)
Socket(InetAddress address, int port)
Socket(InetAddress host, int port, boolean stream)
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
Socket(Proxy proxy)
Socket(SocketImpl impl)
Модификатор Конструктор Описание
Создаёт отключённый сокет.
Создаёт сокет потокового типа и подключает его к указанному порту на указанном хосте.
Устарело.
Для UDP-транспорта используйте DatagramSocket.
Создаёт сокет и подключает его к указанному удалённому хосту по указанному удалённому порту.
Создаёт сокет потокового типа и подключает его к указанному порту по указанному IP-адресу.
Устарело.
Для UDP-транспорта используйте DatagramSocket.
Создаёт сокет и подключает его к указанному удалённому адресу по указанному удалённому порту.
Создаёт отключённый сокет, указав тип прокси, если таковой требуется, независимо от других настроек.
protected
Создаёт отключённый сокет с указанным пользователем SocketImpl.
END_OF_DOCUMENT_MARKER

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

Модификатор и тип Метод Описание
void bind(SocketAddress bindpoint)
Привязывает сокет к локальному адресу.
void close()
Закрывает этот сокет.
void connect(SocketAddress endpoint)
Подключает этот сокет к серверу.
void connect(SocketAddress endpoint, int timeout)
Подключает этот сокет к серверу со значением таймаута.
SocketChannel getChannel()
Возвращает уникальный объект SocketChannel, связанный с этим сокетом, если таковой есть.
InetAddress getInetAddress()
Возвращает адрес, к которому подключен сокет.
InputStream getInputStream()
Возвращает входной поток для этого сокета.
boolean getKeepAlive()
Проверяет, включен ли SO_KEEPALIVE.
InetAddress getLocalAddress()
Возвращает локальный адрес, к которому привязан сокет.
int getLocalPort()
Возвращает локальный номер порта, к которому привязан этот сокет.
SocketAddress getLocalSocketAddress()
Возвращает адрес конечной точки, к которой привязан этот сокет.
boolean getOOBInline()
Проверяет, включен ли SO_OOBINLINE.
<T> T getOption(SocketOption<T> name)
Возвращает значение параметра сокета.
OutputStream getOutputStream()
Возвращает выходной поток для этого сокета.
int getPort()
Возвращает удалённый номер порта, к которому подключён этот сокет.
int getReceiveBufferSize()
Возвращает значение параметра SO_RCVBUF для этого Socket, то есть размер буфера, используемый платформой для ввода в этот Socket.
SocketAddress getRemoteSocketAddress()
Возвращает адрес конечной точки, к которой подключен этот сокет, или null, если он не подключен.
boolean getReuseAddress()
Проверяет, включен ли SO_REUSEADDR.
int getSendBufferSize()
Получает значение параметра SO_SNDBUF для этого Socket, то есть размер буфера, используемый платформой для вывода в этот Socket.
int getSoLinger()
Возвращает значение параметра SO_LINGER.
int getSoTimeout()
Возвращает значение параметра SO_TIMEOUT. 0 возвращает, если параметр отключен (т.е. таймаут бесконечен).
boolean getTcpNoDelay()
Проверяет, включен ли TCP_NODELAY.
int getTrafficClass()
Возвращает класс трафика или тип обслуживания в заголовке IP для пакетов, отправленных из этого сокета.
boolean isBound()
Возвращает состояние привязки сокета.
boolean isClosed()
Возвращает состояние закрытия сокета.
boolean isConnected()
Возвращает состояние подключения сокета.
boolean isInputShutdown()
Возвращает, закрыта ли читающая половина подключения к сокету.
boolean isOutputShutdown()
Возвращает, закрыта ли записывающая половина подключения к сокету.
void sendUrgentData(int data)
Отправить один байт срочных данных по сокету.
void setKeepAlive(boolean on)
Включить/выключить SO_KEEPALIVE.
void setOOBInline(boolean on)
Включить/выключить SO_OOBINLINE (прием срочных данных TCP). По умолчанию этот параметр отключен, и полученные срочные данные TCP в сокете игнорируются.
<T> Socket setOption(SocketOption<T> name, T value)
Устанавливает значение параметра сокета.
void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
Устанавливает предпочтения производительности для этого сокета.
void setReceiveBufferSize(int size)
Устанавливает параметр SO_RCVBUF в указанное значение для этого Socket.
void setReuseAddress(boolean on)
Включить/выключить параметр сокета SO_REUSEADDR.
void setSendBufferSize(int size)
Устанавливает параметр SO_SNDBUF в указанное значение для этого Socket.
static void setSocketImplFactory(SocketImplFactory fac)
Устарело.
Используйте SocketFactory и подкласс Socket напрямую.
void setSoLinger(boolean on, int linger)
Включить/выключить SO_LINGER с указанным временем ожидания в секундах.
void setSoTimeout(int timeout)
Включить/выключить SO_TIMEOUT с указанным таймаутом в миллисекундах.
void setTcpNoDelay(boolean on)
Включить/выключить TCP_NODELAY (отключить/включить алгоритм Nagle).
void setTrafficClass(int tc)
Устанавливает октет класса трафика или типа обслуживания в заголовке IP для пакетов, отправляемых из этого сокета.
void shutdownInput()
Размещает входной поток этого сокета в конце потока.
void shutdownOutput()
Отключает выходной поток для этого сокета.
Set<SocketOption<?>> supportedOptions()
Возвращает набор параметров сокета, поддерживаемых этим сокетом.
String toString()
Преобразует этот сокет в String.

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

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

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

Сокет

public Socket()
Создаёт неподключённый сокет.

Если приложение указало фабрику реализации клиентского сокета, то метод createSocketImpl этой фабрики вызывается для создания фактической реализации сокета. В противном случае создаётся системная по умолчанию реализация сокета.

С момента:
1.1

Сокет

public Socket(Proxy proxy)
Создаёт неподключённый сокет, указывая тип прокси, если таковой требуется, независимо от других настроек.

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

Примеры:

  • Socket s = new Socket(Proxy.NO_PROXY); создаст обычный сокет, игнорируя другие настройки прокси.
  • Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socks.mydom.com", 1080))); создаст сокет, подключающийся через указанный прокси-сервер SOCKS.
Параметры:
proxy - объект Proxy, определяющий тип проксирования.
Исключения:
IllegalArgumentException - если тип прокси некорректен или null.
SecurityException - если средство защиты безопасности присутствует и разрешение на подключение к прокси отсутствует.
С момента:
1.5
См. также:
  • ProxySelector
  • Proxy

Сокет

protected Socket(SocketImpl impl) throws SocketException
Создаёт неподключённый сокет с заданным SocketImpl.
Параметры:
impl - экземпляр SocketImpl, который подкласс хочет использовать для сокета.
Исключения:
SocketException - если возникла ошибка в базовом протоколе, например, ошибка TCP.
SecurityException - если impl не null и установлено средство защиты безопасности, и его метод checkPermission не разрешает NetPermission("setSocketImpl").
С момента:
1.1

Сокет

public Socket(String host, int port) throws UnknownHostException, IOException
Создаёт и подключает сокет к указанному порту на указанном узле.

Если указанный узел — null, это эквивалентно указанию адреса как InetAddress.getByName(null). Другими словами, это эквивалентно указанию адреса локального интерфейса.

Если приложение указало фабрику реализации клиентского сокета, то метод createSocketImpl этой фабрики вызывается для создания фактической реализации сокета. В противном случае создаётся системная по умолчанию реализация сокета.

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

Параметры:
host - имя узла или null для адреса обратной связи.
port - номер порта.
Исключения:
UnknownHostException - если IP-адрес узла определить не удалось.
IOException - если при создании сокета произошла ошибка ввода-вывода.
SecurityException - если средство защиты безопасности существует и его метод checkConnect не разрешает операцию.
IllegalArgumentException - если параметр порта находится вне допустимого диапазона, который составляет от 0 до 65535 включительно.
См. также:
  • SocketImpl
  • SecurityManager.checkConnect(java.lang.String, int)

Сокет

public Socket(InetAddress address, int port) throws IOException
Создаёт и подключает сокет к указанному порту на указанном IP-адресе.

Если приложение указало фабрику реализации клиентского сокета, то метод createSocketImpl этой фабрики вызывается для создания фактической реализации сокета. В противном случае создаётся системная по умолчанию реализация сокета.

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

Параметры:
address - IP-адрес.
port - номер порта.
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода.
SecurityException - если средство защиты безопасности существует и его метод checkConnect не разрешает операцию.
IllegalArgumentException - если параметр порта находится вне допустимого диапазона, который составляет от 0 до 65535 включительно.
NullPointerException - если address равно null.
См. также:
  • SocketImpl
  • SecurityManager.checkConnect(java.lang.String, int)

Сокет

public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException
Создаёт сокет и подключает его к указанному удалённому узлу на указанном удалённом порту. Сокет также будет привязываться к указанному локальному адресу и порту.

Если указанный узел — null, это эквивалентно указанию адреса как InetAddress.getByName(null). Другими словами, это эквивалентно указанию адреса локального интерфейса.

Локальный номер порта zero позволит системе выбрать свободный порт в ходе операции bind.

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

Параметры:
host - имя удалённого узла или null для адреса обратной связи.
port - удалённый порт
localAddr - локальный адрес, к которому привязывается сокет, или null для anyLocal адреса.
localPort - локальный порт, к которому привязывается сокет, или zero для выбора свободного порта системой.
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода.
SecurityException - если средство защиты безопасности существует и его метод checkConnect не разрешает подключение к назначению или его метод checkListen не разрешает привязку к локальному порту.
IllegalArgumentException - если параметр порта или localPort находится вне допустимого диапазона, который составляет от 0 до 65535 включительно.
С момента:
1.1
См. также:
  • SecurityManager.checkConnect(java.lang.String, int)

Сокет

public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException
Создаёт сокет и подключает его к указанному удалённому адресу на указанном удалённом порту. Сокет также будет привязываться к указанному локальному адресу и порту.

Если указанный локальный адрес — null, это эквивалентно указанию адреса как любого локального адреса (см. InetAddress.isAnyLocalAddress()).

Локальный номер порта zero позволит системе выбрать свободный порт в ходе операции bind.

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

Параметры:
address - удалённый адрес
port - удалённый порт
localAddr - локальный адрес, к которому привязывается сокет, или null для anyLocal адреса.
localPort - локальный порт, к которому привязывается сокет или zero для выбора свободного порта системой.
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода.
SecurityException - если средство защиты безопасности существует и его метод checkConnect не разрешает подключение к назначению или его метод checkListen не разрешает привязку к локальному порту.
IllegalArgumentException - если параметр порта или localPort находится вне допустимого диапазона, который составляет от 0 до 65535 включительно.
NullPointerException - если address равно null.
С момента:
1.1
См. также:
  • SecurityManager.checkConnect(java.lang.String, int)

Сокет

@Deprecated public Socket(String host, int port, boolean stream) throws IOException
Устарело.
Для UDP-транспорта используйте DatagramSocket.
Создаёт сокет потокового типа и подключает его к указанному номеру порта на указанном узле.

Если указанный узел является null, это эквивалентно указанию адреса как InetAddress.getByName(null). Другими словами, это эквивалентно указанию адреса локального интерфейса.

Если аргумент stream является true, это создаёт сокет потокового типа. Если аргумент stream является false, это создаёт сокет дейтаграммного типа.

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

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

Если используется сокет UDP, параметры сокета, относящиеся к TCP/IP, не будут применяться.

Параметры:
host - имя узла или null для адреса обратной петли.
port - номер порта.
stream - boolean, указывающий, является ли это сокет потокового типа или дейтаграммного типа.
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода.
SecurityException - если существует менеджер безопасности, и его метод checkConnect не разрешает операцию.
IllegalArgumentException - если параметр порта находится вне заданного диапазона допустимых значений портов, который составляет от 0 до 65535 включительно.
См. также:
  • SocketImpl
  • SecurityManager.checkConnect(java.lang.String, int)

Сокет

@Deprecated public Socket(InetAddress host, int port, boolean stream) throws IOException
Устарело.
Для UDP-транспорта используйте DatagramSocket.
Создаёт сокет и подключает его к указанному номеру порта по указанному IP-адресу.

Если аргумент stream является true, это создаёт сокет потокового типа. Если аргумент stream является false, это создаёт сокет дейтаграммного типа.

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

Если установлен менеджер безопасности, его метод checkConnect вызывается с host.getHostAddress() и port в качестве аргументов. Это может привести к исключению SecurityException.

Если используется сокет UDP, параметры сокета, относящиеся к TCP/IP, не будут применяться.

Параметры:
host - IP-адрес.
port - номер порта.
stream - если true, создать сокет потокового типа; в противном случае, создать сокет дейтаграммного типа.
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода.
SecurityException - если существует менеджер безопасности, и его метод checkConnect не разрешает операцию.
IllegalArgumentException - если параметр порта находится вне заданного диапазона допустимых значений портов, который составляет от 0 до 65535 включительно.
NullPointerException - если host равно null.
См. также:
  • SocketImpl
  • SecurityManager.checkConnect(java.lang.String, int)

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

connect

public void connect(SocketAddress endpoint) throws IOException
Подключает этот сокет к серверу.

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

  1. Сокет ассоциирован с SocketChannel. В этом случае прерывание потока, устанавливающего соединение, закроет базовый канал и вызовет исключение ClosedByInterruptException с установленным состоянием прерывания.
  2. Сокет использует реализацию сокета по умолчанию, и виртуальный поток устанавливает соединение. В этом случае прерывание виртуального потока заставит его проснуться и закрыть сокет. Этот метод затем выбросит SocketException с установленным состоянием прерывания.
Параметры:
endpoint - SocketAddress
Исключения:
IOException - если при подключении произошла ошибка
IllegalBlockingModeException - если у этого сокета есть связанный канал, и канал находится в режиме без блокировки
IllegalArgumentException - если конечная точка равна null или является подклассом SocketAddress, не поддерживаемым этим сокетом
С тех пор:
1.4

connect

public void connect(SocketAddress endpoint, int timeout) throws IOException
Подключает этот сокет к серверу со значением таймаута. Значение таймаута 0 интерпретируется как бесконечный таймаут. Подключение будет блокироваться до тех пор, пока не будет установлено или не произойдёт ошибка.

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

  1. Сокет ассоциирован с SocketChannel. В этом случае прерывание потока, устанавливающего соединение, закроет базовый канал и вызовет исключение ClosedByInterruptException с установленным состоянием прерывания.
  2. Сокет использует реализацию сокета по умолчанию, и виртуальный поток устанавливает соединение. В этом случае прерывание виртуального потока заставит его проснуться и закрыть сокет. Этот метод затем выбросит SocketException с установленным состоянием прерывания.
Параметры:
endpoint - SocketAddress
timeout - значение таймаута в миллисекундах.
Исключения:
IOException - если при подключении произошла ошибка
SocketTimeoutException - если таймаут истек до подключения
IllegalBlockingModeException - если у этого сокета есть связанный канал, и канал находится в режиме без блокировки
IllegalArgumentException - если endpoint равен null или является подклассом SocketAddress, не поддерживаемым этим сокетом, или если timeout отрицателен
С тех пор:
1.4

bind

public void bind(SocketAddress bindpoint) throws IOException
Связывает сокет с локальным адресом.

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

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

getInetAddress

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

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

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

getLocalAddress

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

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

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

getPort

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

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

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

getLocalPort

public int getLocalPort()
Возвращает локальный номер порта, к которому привязан этот сокет.

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

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

getRemoteSocketAddress

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

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

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

getLocalSocketAddress

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

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

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

Возвращает:
a SocketAddress, представляющий локальную конечную точку этого сокета, или SocketAddress, представляющий адрес обратной петли, если это запрещено менеджером безопасности, или null, если сокет ещё не привязан.
С:
1.4
См. также:
  • getLocalAddress()
  • getLocalPort()
  • bind(SocketAddress)
  • SecurityManager.checkConnect(java.lang.String, int)

getChannel

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

У сокета будет канал, если и только если сам канал был создан с помощью методов SocketChannel.open или ServerSocketChannel.accept.

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

getInputStream

public InputStream getInputStream() throws IOException
Возвращает поток ввода для этого сокета.

Если у этого сокета есть связанный канал, то возвращаемый поток ввода делегирует все свои операции каналу. Если канал находится в режиме без блокировки, то операции потока ввода read будут выбрасывать IllegalBlockingModeException.

Чтение из потока ввода может быть прервано в следующих случаях:

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

В аномальных условиях подлежащее соединение может быть разорвано удалённым хостом или сетевым программным обеспечением (например, сброс соединения в случае TCP-соединений). Когда сетевое программное обеспечение обнаруживает разорванное соединение, для возвращаемого потока ввода применимо следующее:

  • Сетевое программное обеспечение может отбросить байты, которые буферизируются сокетом. Байты, которые не отбрасываются сетевым программным обеспечением, могут быть прочитаны с помощью read.

  • Если байты не буферизированы в сокете или все буферизованные байты были извлечены с помощью read, все последующие вызовы read сгенерируют IOException.

  • Если байты не буферизированы в сокете, и сокет не был закрыт с помощью close, то available вернёт 0.

Закрытие возвращаемого InputStream закроет ассоциированный сокет.

Возвращает:
поток ввода для чтения байтов из этого сокета.
Исключения:
IOException - если при создании потока ввода произошла ошибка ввода-вывода, сокет закрыт, сокет не подключён или ввод сокета был закрыт с помощью shutdownInput()

getOutputStream

public OutputStream getOutputStream() throws IOException
Возвращает поток вывода для этого сокета.

Если у этого сокета есть связанный канал, то возвращаемый поток вывода делегирует все свои операции каналу. Если канал находится в режиме без блокировки, то операции потока вывода write будут выбрасывать IllegalBlockingModeException.

Запись в поток вывода может быть прервана в следующих случаях:

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

Закрытие возвращаемого OutputStream закроет ассоциированный сокет.

Возвращает:
поток вывода для записи байтов в этот сокет.
Исключения:
IOException - если при создании потока вывода произошла ошибка ввода-вывода или сокет не подключён.

setTcpNoDelay

public void setTcpNoDelay(boolean on) throws SocketException
Включает/выключает TCP_NODELAY (отключает/включает алгоритм Нагла).
Параметры:
on - true для включения TCP_NODELAY, false для выключения.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С:
1.1
См. также:
  • getTcpNoDelay()

getTcpNoDelay

public boolean getTcpNoDelay() throws SocketException
Проверяет, включен ли TCP_NODELAY.
Возвращает:
boolean, указывающее, включен ли или нет TCP_NODELAY.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С:
1.1
См. также:
  • setTcpNoDelay(boolean)

setSoLinger

public void setSoLinger(boolean on, int linger) throws SocketException
Включает/выключает SO_LINGER с указанным временем ожидания в секундах. Максимальное значение времени ожидания зависит от платформы. Настройка влияет только на закрытие сокета.
Параметры:
on - нужно ли ожидать.
linger - сколько ждать, если ожидание включено.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
IllegalArgumentException - если значение ожидания отрицательно.
С:
1.1
См. также:
  • getSoLinger()

getSoLinger

public int getSoLinger() throws SocketException
Возвращает настройку для SO_LINGER. -1 означает, что опция отключена. Настройка влияет только на закрытие сокета.
Возвращает:
настройка для SO_LINGER.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С:
1.1
См. также:
  • setSoLinger(boolean, int)

sendUrgentData

public void sendUrgentData(int data) throws IOException
Отправка одного байта срочных данных по сокету. Байтом, который будет отправлен, являются нижние восемь бит параметра data. Срочный байт отправляется после любых предшествующих записей в OutputStream сокета и перед любыми будущими записями в OutputStream.
Параметры:
data - Байт данных для отправки
Исключения:
IOException - если при отправке данных возникла ошибка.
С версии:
1.4

setOOBInline

public void setOOBInline(boolean on) throws SocketException
Включение/выключение SO_OOBINLINE (приём срочных данных TCP). По умолчанию этот параметр выключен, и срочные данные TCP, полученные по сокету, игнорируются. Если пользователь хочет получать срочные данные, то этот параметр должен быть включён. При включении срочные данные принимаются вместе с обычными данными.

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

Параметры:
on - true для включения SO_OOBINLINE, false для выключения.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С версии:
1.4
См. также:
  • getOOBInline()

getOOBInline

public boolean getOOBInline() throws SocketException
Проверка, включен ли SO_OOBINLINE.
Возвращает:
значения boolean, указывающие, включен ли или нет SO_OOBINLINE.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С версии:
1.4
См. также:
  • setOOBInline(boolean)

setSoTimeout

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

getSoTimeout

public int getSoTimeout() throws SocketException
Возвращает значение для SO_TIMEOUT. Возвращаемое значение 0 подразумевает, что параметр отключён (т. е. таймаут бесконечен).
Возвращает:
значение для SO_TIMEOUT
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С версии:
1.1
См. также:
  • setSoTimeout(int)

setSendBufferSize

public void setSendBufferSize(int size) throws SocketException
Устанавливает параметр SO_SNDBUF для данного Socket со значением указанного значения. Параметр SO_SNDBUF используется кодом сетевого стека платформы в качестве подсказки для размера буфера сети.

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

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

getSendBufferSize

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

setReceiveBufferSize

public void setReceiveBufferSize(int size) throws SocketException
Устанавливает параметр SO_RCVBUF для данного Socket со значением указанного значения. Параметр SO_RCVBUF используется кодом сетевого стека платформы в качестве подсказки для размера буфера сети.

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

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

Значение SO_RCVBUF также используется для установки TCP-окна приёма, которое объявляется удалённому узлу. Обычно размер окна можно изменять в любое время, когда сокет подключён. Однако, если требуется окно приёма, большее 64K, то это должно быть запрошено **до** подключения сокета к удалённому узлу. Есть два случая, о которых следует помнить:

  1. Для сокетов, принятых от ServerSocket, это необходимо сделать, вызвав ServerSocket.setReceiveBufferSize(int) перед привязкой ServerSocket к локальному адресу.
  2. Для клиентских сокетов, setReceiveBufferSize() необходимо вызвать перед подключением сокета к его удалённому узлу.
Параметры:
size - размер, на который нужно установить размер буфера приёма. Это значение должно быть больше 0.
Исключения:
IllegalArgumentException - если значение равно 0 или отрицательно.
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С версии:
1.2
См. также:
  • getReceiveBufferSize()
  • ServerSocket.setReceiveBufferSize(int)

getReceiveBufferSize

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

setKeepAlive

public void setKeepAlive(boolean on) throws SocketException
Включение/выключение SO_KEEPALIVE.
Параметры:
on - включить или выключить сокет keep alive.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С версии:
1.3
См. также:
  • getKeepAlive()

getKeepAlive

public boolean getKeepAlive() throws SocketException
Проверка, включен ли SO_KEEPALIVE.
Возвращает:
значения boolean, указывающие, включен ли или нет SO_KEEPALIVE.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С версии:
1.3
См. также:
  • setKeepAlive(boolean)

setTrafficClass

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

Значение 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, указывающему, что операция не разрешена.

Как указывает RFC 1122, раздел 4.2.4.2, совместимая реализация TCP должна, но не обязана, позволять приложению изменять поле TOS в течение срока действия соединения. Таким образом, может ли поле типа службы быть изменено после установления TCP-соединения, зависит от реализации на базовой платформе. Приложения не должны предполагать, что они могут изменить поле TOS после подключения.

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

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

getTrafficClass

public int getTrafficClass() throws SocketException
Получает класс трафика или байт типа службы в заголовке IP для пакетов, отправляемых из этого сокета

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

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

setReuseAddress

public void setReuseAddress(boolean on) throws SocketException
Включает/выключает параметр сокета SO_REUSEADDR.

Когда TCP-соединение закрывается, соединение может оставаться в состоянии таймаута в течение определенного периода времени после закрытия соединения (обычно известного как состояние TIME_WAIT или состояние ожидания 2MSL). Для приложений, использующих известный адрес сокета или порт, может быть невозможно привязать сокет к необходимому SocketAddress, если существует соединение в состоянии таймаута, связанное с адресом сокета или портом.

Включение SO_REUSEADDR перед привязкой сокета с помощью bind(SocketAddress) позволяет привязать сокет, даже если предыдущее соединение находится в состоянии таймаута.

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

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

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

getReuseAddress

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

close

public void close() throws IOException
Закрывает этот сокет.

Любой поток, который в данный момент заблокирован в операции ввода-вывода над этим сокетом, сгенерирует исключение SocketException.

После закрытия сокет недоступен для дальнейшего использования в сети (т.е. его нельзя повторно подключить или перепривязать). Необходимо создать новый сокет.

Закрытие этого сокета также закроет сокетные InputStream и OutputStream.

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

Определено в:
close в интерфейсе AutoCloseable
Определено в:
close в интерфейсе Closeable
Исключения:
IOException - если при закрытии сокета произошла ошибка ввода-вывода.
См. также:
  • isClosed(int)

shutdownInput

public void shutdownInput() throws IOException
Устанавливает входной поток этого сокета в "конец потока". Любые данные, отправленные на входную сторону сокета, подтверждаются, а затем молча отбрасываются.

Если вы считываете данные из входного потока сокета после вызова этого метода для сокета, метод available потока вернет 0, а методы read вернут -1 (конец потока).

Исключения:
IOException - если при закрытии этого сокета произошла ошибка ввода-вывода.
С версии:
1.3
См. также:
  • shutdownOutput()
  • close()
  • setSoLinger(boolean, int)
  • isInputShutdown(int)

shutdownOutput

public void shutdownOutput() throws IOException
Отключает выходной поток для этого сокета. Для TCP-сокета любые предварительно записанные данные будут отправлены, за которыми следует обычная последовательность завершения соединения TCP. Если вы записываете данные в выходной поток сокета после вызова shutdownOutput() для сокета, поток сгенерирует исключение IOException.
Исключения:
IOException - если при закрытии этого сокета произошла ошибка ввода-вывода.
С версии:
1.3
См. также:
  • shutdownInput()
  • close()
  • setSoLinger(boolean, int)
  • isOutputShutdown(int)

toString

public String toString()
Преобразует этот сокет в String.
Переопределяет:
toString в классе Object
Возвращает:
строковое представление этого сокета.

isConnected

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

Примечание: закрытие сокета не очищает его состояние соединения, что означает, что этот метод вернет true для закрытого сокета (см. isClosed()), если он был успешно подключен до закрытия.

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

isBound

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

Примечание: закрытие сокета не очищает его состояние привязки, что означает, что этот метод вернет true для закрытого сокета (см. isClosed()), если он был успешно привязан до закрытия.

Возвращает:
true, если сокет был успешно привязан к адресу
С версии:
1.4
См. также:
  • bind(java.net.SocketAddress)

isClosed

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

isInputShutdown

public boolean isInputShutdown()
Возвращает, закрыта ли сторона чтения соединения сокета.
Возвращает:
true, если вход сокета закрыт
С версии:
1.4
См. также:
  • shutdownInput()

isOutputShutdown

public boolean isOutputShutdown()
Возвращает, закрыта ли выходная половина сокета.
Возвращает:
true, если выходной поток сокета закрыт
С тех пор:
1.4
См. также:
  • shutdownOutput()

setSocketImplFactory

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

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

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

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

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

setPerformancePreferences

public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
Устанавливает предпочтения производительности для данного сокета.

Сокеты по умолчанию используют протокол TCP/IP. Некоторые реализации могут предлагать альтернативные протоколы, которые имеют разные характеристики производительности по сравнению с TCP/IP. Этот метод позволяет приложению выразить свои предпочтения относительно того, как эти компромиссы должны быть сделаны, когда реализация выбирает из доступных протоколов.

Предпочтения производительности описываются тремя целыми числами, значения которых указывают на относительную важность короткого времени подключения, низкой задержки и высокой пропускной способности. Абсолютные значения целых чисел не имеют значения; для выбора протокола значения просто сравниваются, а большие значения указывают на более сильные предпочтения. Отрицательные значения означают более низкий приоритет, чем положительные значения. Если, например, приложение отдает предпочтение короткому времени подключения перед низкой задержкой и высокой пропускной способностью, то оно может вызвать этот метод со значениями (1, 0, 0). Если приложение отдает предпочтение высокой пропускной способности перед низкой задержкой, а низкой задержке перед коротким временем подключения, то оно может вызвать этот метод со значениями (0, 1, 2).

Вызов этого метода после подключения данного сокета не окажет никакого влияния.

Параметры:
connectionTime - целое число, выражающее относительную важность короткого времени соединения
latency - целое число, выражающее относительную важность низкой задержки
bandwidth - целое число, выражающее относительную важность высокой пропускной способности
С тех пор:
1.5

setOption

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

getOption

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

supportedOptions

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

© 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/Socket.html

Spec-Zone.ru

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