Spec-Zone.ru › OpenJDK 25

Класс 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()
Возвращает, закрыта ли принимающая половина соединения сокета.
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)
Устанавливает для этого Socket указанное значение параметра SO_RCVBUF.
void setReuseAddress(boolean on)
Включает или отключает параметр сокета SO_REUSEADDR.
void setSendBufferSize(int size)
Устанавливает для этого Socket указанное значение параметра SO_SNDBUF.
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

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

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
Создает неподключенный Socket с заданным пользователем SocketImpl.
Параметры:
impl — экземпляр SocketImpl, который подкласс желает использовать для Socket.
Исключения:
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 с установленным статусом прерывания.
Параметры:
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
Задает для этого Socket значение параметра SO_SNDBUF. Параметр 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
Задает для этого Socket значение параметра SO_RCVBUF. Параметр 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
Отключает выходной поток этого сокета. Для сокета TCP все ранее записанные данные будут отправлены, после чего выполнится стандартная последовательность завершения соединения TCP. Если после вызова shutdownOutput() для сокета записать данные в его выходной поток, поток выбросит IOException.
Исключения:
IOException — если при отключении выходного потока этого сокета возникает ошибка ввода-вывода, сокет не подключен или сокет закрыт.
С версии:
1.3
См. также:
  • shutdownInput()
  • close()
  • setSoLinger(boolean, int)
  • isOutputShutdown()

toString

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

isConnected

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

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

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

isBound

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

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

Возвращает:
true, если сокет успешно привязан к адресу
С версии:
1.4
См. также:
  • bind(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 и используя защищенный конструктор, принимающий в качестве параметра реализацию.
Задает фабрику реализации клиентских сокетов для приложения. Фабрику можно задать только один раз.

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

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

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

setPerformancePreferences

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

По умолчанию сокеты используют протокол 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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/net/Socket.html

Spec-Zone.ru

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