Spec-Zone.ru › OpenJDK 27

Класс Socket

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

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

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

Параметры сокета
Имя параметра Описание
SO_SNDBUF Размер буфера отправки сокета
SO_RCVBUF Размер буфера приёма сокета
SO_KEEPALIVE Поддерживать соединение активным
SO_REUSEADDR Повторно использовать адрес
SO_LINGER Задерживать закрытие при наличии данных (только если настроен блокирующий режим)
TCP_NODELAY Отключить алгоритм Нейгла
Также могут поддерживаться дополнительные параметры (зависящие от реализации).
Начиная с:
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 может быть удалён в будущей версии.
Параметр stream в ранних выпусках JDK предоставлял возможность создать Socket, использующий дейтаграммный сокет.
Создаёт сокет и подключает его к указанному удалённому узлу и указанному удалённому порту.
Создаёт потоковый сокет и подключает его к указанному номеру порта по указанному IP-адресу.
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Параметр stream в ранних выпусках JDK предоставлял возможность создать Socket, использующий дейтаграммный сокет.
Создаёт сокет и подключает его к указанному удалённому адресу и указанному удалённому порту.
Создаёт неподключённый сокет, указывая тип прокси-сервера, если он используется, независимо от любых других настроек.
protected
Создаёт неподключённый сокет с заданным пользователем SocketImpl.

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

Модификатор и тип Метод Описание
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. Возвращаемое значение -1 означает, что параметр отключён.
int getSoTimeout()
Возвращает значение параметра SO_TIMEOUT. Возвращаемое значение 0 означает, что параметр отключён (то есть тайм-аут не ограничен).
boolean getTcpNoDelay()
Проверяет, включён ли параметр TCP_NODELAY.
int getTrafficClass()
Получает класс трафика или тип обслуживания в заголовке IP для пакетов, отправляемых из этого сокета
boolean isBound()
Возвращает состояние привязки сокета.
boolean isClosed()
Возвращает состояние закрытия сокета.
boolean isConnected()
Возвращает состояние подключения сокета.
boolean isInputShutdown()
Возвращает true, если чтение из сокета было остановлено.
boolean isOutputShutdown()
Возвращает true, если запись в сокет была остановлена.
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)
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Этот метод предназначался для поддержки протоколов, которые теперь устарели.
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.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Показывает, равен ли какой-либо другой объект этому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Финализация устарела и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.

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

Socket

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

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

Начиная с версии:
1.1

Socket

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

Socket

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

Socket

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

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

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

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

Socket

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

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

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

Socket

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

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

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

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

Socket

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

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

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

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

Socket

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

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

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

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

Socket

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

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

Параметры:
host — IP-адрес.
port — номер порта.
stream — должно иметь значение true; значение false не допускается.
Исключения:
IOException — если при создании сокета произошла ошибка ввода-вывода.
IllegalArgumentException — если параметр stream имеет значение false или значение параметра порта выходит за указанный допустимый диапазон от 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
Подключает этот сокет к серверу с указанным временем ожидания. Нулевое время ожидания трактуется как бесконечное. В этом случае вызов будет блокироваться до установления соединения или возникновения ошибки.

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

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

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

bind

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

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

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

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. В этом случае прерывание потока, читающего из входного потока, закроет базовый канал и приведет к тому, что метод чтения выбросит ClosedByInterruptException; при этом статус прерывания потока будет установлен.
  2. Сокет использует системную реализацию по умолчанию, а из входного потока читает виртуальный поток. В этом случае прерывание виртуального потока приведет к его пробуждению и закрытию сокета. Затем метод чтения выбросит SocketException; при этом статус прерывания потока будет установлен.

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

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

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

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

Закрытие возвращенного InputStream приведет к закрытию связанного сокета.

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

getOutputStream

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

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

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

  1. Сокет связан с SocketChannel. В этом случае прерывание потока, записывающего в выходной поток, закроет базовый канал и приведет к тому, что метод записи выбросит ClosedByInterruptException; при этом статус прерывания потока будет установлен.
  2. Сокет использует системную реализацию по умолчанию, а в выходной поток записывает виртуальный поток. В этом случае прерывание виртуального потока приведет к его пробуждению и закрытию сокета. Затем метод записи выбросит 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 — продолжительность ожидания, если параметр on имеет значение true.
Исключения:
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, связанного с этим Socket, будет блокироваться только в течение указанного времени. По истечении времени ожидания возникает исключение java.net.SocketTimeoutException, однако Socket остается действительным. Нулевое значение времени ожидания означает бесконечное ожидание. Чтобы параметр действовал, его необходимо включить до начала блокирующей операции.
Параметры:
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, объявляемого удаленному узлу. Как правило, размер окна можно менять в любое время после установления соединения через сокет. Однако если требуется окно приема размером более 64 КБ, запрос необходимо выполнить до подключения сокета к удаленному узлу. Следует учитывать два случая:

  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 — следует ли включить для сокета поддержание активности соединения.
Вызывает исключения:
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 для пакетов, отправляемых этим Socket. Поскольку нижележащая сетевая реализация может игнорировать это значение, приложениям следует рассматривать его как подсказку.

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

Примечания:

Для Internet Protocol версии 4 значение состоит из integer, младшие 8 бит которого задают значение октета TOS в IP-пакетах, отправляемых сокетом. В RFC 1349 определены следующие значения TOS:

  • IPTOS_LOWCOST (0x02)
  • IPTOS_RELIABILITY (0x04)
  • IPTOS_THROUGHPUT (0x08)
  • IPTOS_LOWDELAY (0x10)
Последний младший бит всегда игнорируется, поскольку он соответствует биту MBZ (должен быть равен нулю).

Установка битов в поле приоритета может привести к SocketException, указывающему, что операция не разрешена.

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

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

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

getTrafficClass

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

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

Возвращает:
уже заданный класс трафика или тип обслуживания
Вызывает исключения:
SocketException — если при получении значения класса трафика или типа обслуживания произошла ошибка либо сокет закрыт.
Начиная с:
1.4
См. также:
  • setTrafficClass(int)
  • StandardSocketOptions.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.
Возвращает:
значение boolean, указывающее, включен ли SO_REUSEADDR.
Вызывает исключения:
SocketException — если в нижележащем протоколе произошла ошибка, например ошибка TCP, или сокет закрыт.
Начиная с:
1.4
См. также:
  • setReuseAddress(boolean)

close

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

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

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

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

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

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

shutdownInput

public void shutdownInput() throws IOException
Завершает прием данных по соединению, не закрывая сокет.

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

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

shutdownOutput

public void shutdownOutput() throws IOException
Завершает отправку данных по соединению, не закрывая сокет.

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

Вызывает исключения:
IOException — если при завершении работы с этим сокетом произошла ошибка ввода-вывода, сокет не подключен, отправка данных уже завершена или сокет закрыт.
Начиная с:
1.3
См. также:
  • shutdownInput()
  • close()
  • setSoLinger(boolean, int)
  • isOutputShutdown()

toString

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

isConnected

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

Закрытие сокета не сбрасывает его состояние подключения. Это означает, что данный метод вернет true для закрытого сокета, если до закрытия он был успешно подключен.

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

isBound

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

Закрытие сокета не сбрасывает его состояние привязки. Это означает, что данный метод вернет true для закрытого сокета, если до закрытия он был успешно привязан.

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

isClosed

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

isInputShutdown

public boolean isInputShutdown()
Возвращает true, если прием данных через сокет был завершен.
Возвращает:
true, только если предыдущий вызов shutdownInput() завершился успешно; в противном случае — false
Начиная с:
1.4

isOutputShutdown

public boolean isOutputShutdown()
Возвращает true, если отправка данных через сокет была завершена.
Возвращает:
true, только если предыдущий вызов shutdownOutput() завершился успешно; в противном случае — false
Начиная с:
1.4

setSocketImplFactory

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

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

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

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

setPerformancePreferences

@Deprecated(since="26", forRemoval=true) public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
Устарело, подлежит удалению: этот элемент API может быть удален в будущей версии.
Этот метод предназначался для протоколов, которые теперь устарели.
Задает предпочтения производительности для этого сокета.

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

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

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

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

setOption

public <T> Socket setOption(SocketOption<T> name, T value) throws IOException
Задает значение параметра сокета.
Параметры типа:
T — тип значения параметра сокета
Параметры:
name — параметр сокета
value — значение параметра сокета. Для некоторых параметров допустимо значение null.
Возвращает:
этот Socket
Вызывает исключения:
UnsupportedOperationException — если сокет не поддерживает этот параметр.
IllegalArgumentException — если значение недопустимо для этого параметра.
IOException — если произошла ошибка ввода-вывода или сокет закрыт.
NullPointerException — если имя равно null
Начиная с:
9

getOption

public <T> T getOption(SocketOption<T> name) throws IOException
Возвращает значение параметра сокета.
Параметры типа:
T — тип значения параметра сокета
Параметры:
name — параметр сокета
Возвращает:
значение параметра сокета.
Вызывает исключения:
UnsupportedOperationException — если сокет не поддерживает этот параметр.
IOException — если произошла ошибка ввода-вывода или сокет закрыт.
NullPointerException — если имя равно null
Начиная с:
9

supportedOptions

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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