Spec-Zone.ru › OpenJDK 24

Класс 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)
Модификатор Конструктор Описание
Создаёт незапущенный сокет.
Создаёт сокет и подключает его к указанному номеру порта на указанном хосте.
Устаревший, подлежит удалению: Этот элемент API может быть удален в будущей версии.
Используйте DatagramSocket для UDP-транспорта.
Создаёт сокет и подключает его к указанному удалённому хосту на указанном удалённом порту.
Создаёт сокет и подключает его к указанному номеру порта по указанному IP-адресу.
Устаревший, подлежит удалению: Этот элемент API может быть удален в будущей версии.
Используйте DatagramSocket для UDP-транспорта.
Создаёт сокет и подключает его к указанному удалённому адресу на указанном удалённом порту.
Создаёт незапущенный сокет, указывая тип прокси-сервера, если таковой имеется, независимо от других настроек.
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 (отключает/включает алгоритм Найгла).
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)
Создаёт незапущенный сокет, указывая тип используемого прокси (если требуется), независимо от других настроек.

Примеры:

  • 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.
С:
1.5
См. также:
  • ProxySelector
  • Proxy

Сокет

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

Сокет

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

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

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

Параметры:
host - имя узла или null для адреса обратной связи.
port - номер порта.
Исключения:
UnknownHostException - если IP-адрес узла не может быть определён.
IOException - если при создании сокета происходит ошибка ввода-вывода.
IllegalArgumentException - если параметр порта находится за пределами допустимого диапазона (от 0 до 65535 включительно).

Сокет

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

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

Параметры:
address - IP-адрес.
port - номер порта.
Исключения:
IOException - если при создании сокета происходит ошибка ввода-вывода.
IllegalArgumentException - если параметр порта находится за пределами допустимого диапазона (от 0 до 65535 включительно).
NullPointerException - если address равно null.

Сокет

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

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

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

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

Сокет

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

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

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

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

Сокет

@Deprecated(forRemoval=true, since="1.1") public Socket(String host, int port, boolean stream) throws IOException
Устаревший, подлежит удалению: Этот элемент API может быть удалён в будущей версии.
Используйте DatagramSocket для UDP-транспорта.
Создаёт сокет потокового типа и подключает его к указанному порту на указанном узле.

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

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

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

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

Параметры:
host - имя узла или null для адреса обратной связи.
port - номер порта.
stream - параметр, указывающий, является ли это сокетом потокового типа или датаграмным сокетом.
Исключения:
IOException - если при создании сокета происходит ошибка ввода-вывода.
IllegalArgumentException - если параметр порта находится за пределами допустимого диапазона (от 0 до 65535 включительно).

Сокет

@Deprecated(forRemoval=true, since="1.1") public Socket(InetAddress host, int port, boolean stream) throws IOException
Устаревший, подлежит удалению: Этот элемент API может быть удалён в будущей версии.
Используйте DatagramSocket вместо этого для UDP-транспорта.
Создаёт сокет и подключает его к указанному номеру порта на указанном IP-адресе.

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

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

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

Параметры:
host - IP-адрес.
port - номер порта.
stream - если true, создать сокет для потокового соединения; в противном случае, создать сокет для дейтаграмм.
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода.
IllegalArgumentException - если параметр порта находится вне допустимого диапазона (от 0 до 65535 включительно).
NullPointerException - если host равно null.

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

connect

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

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

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

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

connect

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

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

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

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

bind

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

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

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

getInetAddress

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

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

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

getLocalAddress

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

getPort

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

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

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

getLocalPort

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

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

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

getRemoteSocketAddress

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

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

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

getLocalSocketAddress

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

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

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

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.
Возвращает:
значение, указывающее, включен ли 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 и перед любыми будущими записями в поток вывода.
Параметры:
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.
Возвращает:
значение, указывающее, включен ли SO_OOBINLINE.
ИСКЛЮЧЕНИЯ:
SocketException - если произошла ошибка в базовом протоколе, например, TCP-ошибка, или сокет закрыт.
С тех пор:
1.4
См. также:
  • setOOBInline(boolean)

setSoTimeout

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

getSoTimeout

public int getSoTimeout() throws SocketException
Возвращает значение параметра SO_TIMEOUT. 0 означает, что параметр отключен (т.е. таймаут бесконечен).
Returns:
значение параметра SO_TIMEOUT
Throws:
SocketException - если возникла ошибка в базовом протоколе, например, TCP ошибка, или сокет закрыт.
Since:
1.1
See Also:
  • setSoTimeout(int)

setSendBufferSize

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

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

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

getSendBufferSize

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

setReceiveBufferSize

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

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

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

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

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

getReceiveBufferSize

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

setKeepAlive

public void setKeepAlive(boolean on) throws SocketException
Включить/отключить SO_KEEPALIVE.
Parameters:
on - включить или выключить поддержание соединения.
Throws:
SocketException - если возникла ошибка в базовом протоколе, например, TCP ошибка, или сокет закрыт.
Since:
1.3
See Also:
  • getKeepAlive()

getKeepAlive

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

setTrafficClass

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

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

Заметки:

Для Internet Protocol v4 значение состоит из 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 после подключения.

Для Internet Protocol v6 tc - значение, которое будет помещено в поле sin6_flowinfo заголовка IP.

Parameters:
tc - значение int для набора битов.
Throws:
SocketException - если возникла ошибка при установке класса трафика или октета типа обслуживания, или сокет закрыт.
Since:
1.4
See Also:
  • getTrafficClass()
  • StandardSocketOptions.IP_TOS

getTrafficClass

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

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

Returns:
установленный класс трафика или тип обслуживания
Throws:
SocketException - если возникла ошибка при получении значения класса трафика или типа обслуживания, или сокет закрыт.
Since:
1.4
See Also:
  • setTrafficClass(int)
  • StandardSocketOptions.IP_TOS
END_OF_DOCUMENT_MARKER

setReuseAddress

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

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

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

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

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

Parameters:
on - нужно ли включить или выключить опцию сокета
Throws:
SocketException - если произошла ошибка при включении или выключении опции сокета SO_REUSEADDR или сокет закрыт.
Since:
1.4
See Also:
  • getReuseAddress()
  • bind(SocketAddress)
  • isClosed()
  • isBound()

getReuseAddress

public boolean getReuseAddress() throws SocketException
Проверяет, включена ли опция SO_REUSEADDR.
Returns:
значение boolean, указывающее, включена ли опция SO_REUSEADDR.
Throws:
SocketException - если произошла ошибка в базовом протоколе, например, TCP-ошибка, или сокет закрыт.
Since:
1.4
See Also:
  • setReuseAddress(boolean)

close

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

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

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

Закрытие этого сокета также закроет входной и выходной потоки сокета InputStream и OutputStream.

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

Specified by:
close в интерфейсе AutoCloseable
Specified by:
close в интерфейсе Closeable
Throws:
IOException - если произошла ошибка ввода-вывода при закрытии этого сокета.
See Also:
  • isClosed(int)

shutdownInput

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

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

Throws:
IOException - если произошла ошибка ввода-вывода при закрытии сокета, сокет не подключен или сокет закрыт.
Since:
1.3
See Also:
  • shutdownOutput()
  • close()
  • setSoLinger(boolean, int)
  • isInputShutdown(int)

shutdownOutput

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

toString

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

isConnected

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

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

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

isBound

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

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

Returns:
true, если сокет был успешно привязан к адресу
Since:
1.4
See Also:
  • bind(java.net.SocketAddress)

isClosed

public boolean isClosed()
Возвращает состояние закрытия сокета.
Returns:
true, если сокет был закрыт
Since:
1.4
See Also:
  • close()

isInputShutdown

public boolean isInputShutdown()
Возвращает, закрыта ли сторона чтения сокета.
Returns:
true, если входной поток сокета был закрыт
Since:
1.4
See Also:
  • shutdownInput()

isOutputShutdown

public boolean isOutputShutdown()
Возвращает, закрыта ли сторона записи сокета.
Returns:
true, если выходной поток сокета был закрыт
Since:
1.4
See Also:
  • shutdownOutput()

setSocketImplFactory

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

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

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

Parameters:
fac - требуемая фабрика.
Throws:
IOException - если произошла ошибка ввода-вывода при установке фабрики сокета.
SocketException - если фабрика уже определена.
See Also:
  • SocketImplFactory.createSocketImpl()

setPerformancePreferences

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

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

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

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

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

setOption

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

getOption

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

supportedOptions

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

© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/net/Socket.html

Spec-Zone.ru

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