Spec-Zone.ru › OpenJDK 17

Класс Socket

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

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

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

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

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

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

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

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

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

Сокет

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

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

С момента:
1.1

Сокет

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

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

Примеры:

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

Сокет

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

Сокет

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

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

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

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

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

Сокет

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

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

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

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

Сокет

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

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

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

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

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

Сокет

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

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

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

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

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

Сокет

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

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

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

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

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

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

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

Сокет

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

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

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

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

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

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

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

connect

public void connect(SocketAddress endpoint) throws IOException
Подключает этот сокет к серверу.
Параметры:
endpoint - SocketAddress
Исключения:
IOException - если при подключении произошла ошибка
IllegalBlockingModeException - если у этого сокета есть связанный канал, и канал находится в режиме без блокировки
IllegalArgumentException - если конечная точка равна null или является подклассом SocketAddress, не поддерживаемым этим сокетом
С:
1.4

connect

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

bind

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

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

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

getInetAddress

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

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

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

getLocalAddress

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

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

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

getPort

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

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

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

getLocalPort

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

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

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

getRemoteSocketAddress

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

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

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

getLocalSocketAddress

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

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

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

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

getChannel

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

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

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

getInputStream

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

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

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

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

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

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

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

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

getOutputStream

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

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

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

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

setTcpNoDelay

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

getTcpNoDelay

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

setSoLinger

public void setSoLinger(boolean on, int linger) throws SocketException
Включить/выключить SO_LINGER со временем ожидания в секундах. Максимальное значение таймаута зависит от платформы. Настройка влияет только на закрытие сокета.
Параметры:
on - оставлять или нет.
linger - время ожидания, если оставлять - 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 и перед любыми будущими записями в поток вывода.
Параметры:
data - байт данных для отправки
Издаёт исключения:
IOException - если произошла ошибка при отправке данных.
С момента:
1.4

setOOBInline

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

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

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

getOOBInline

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

setSoTimeout

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

getSoTimeout

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

setSendBufferSize

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

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

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

getSendBufferSize

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

setReceiveBufferSize

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

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

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

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

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

getReceiveBufferSize

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

setKeepAlive

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

getKeepAlive

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

setTrafficClass

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

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

Примечания:

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

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

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

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

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

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

getTrafficClass

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

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

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

setReuseAddress

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

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

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

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

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

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

getReuseAddress

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

close

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

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

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

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

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

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

shutdownInput

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

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

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

shutdownOutput

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

toString

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

isConnected

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

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

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

isBound

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

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

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

isClosed

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

isInputShutdown

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

isOutputShutdown

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

setSocketImplFactory

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

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

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

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

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

setPerformancePreferences

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

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

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

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

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

setOption

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

getOption

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

supportedOptions

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

© 1993, 2021, 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/17/docs/api/java.base/java/net/Socket.html

Spec-Zone.ru

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