Класс Socket

Все реализованные интерфейсы:
Closeable, AutoCloseable
Прямые известные подклассы:
SSLSocket
public class Socket
extends Object
implements Closeable

Этот класс реализует клиентские сокеты (также называемые просто "сокеты"). Сокет — это конечная точка для связи между двумя машинами.

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

С:
1.0
См. также:
setSocketImplFactory(java.net.SocketImplFactory), SocketImpl, SocketChannel

Конструкторы

Модификатор Конструктор Описание
Socket()

Создаёт несвязанный сокет с типом SocketImpl по умолчанию для системы.

Socket​(String host, int port)

Создаёт потоковый сокет и подключает его к указанному номеру порта на указанном хосте.

Socket​(String host, int port, boolean stream)

Устарело.

Используйте DatagramSocket вместо UDP-транспорта.

Socket​(String host, int port, InetAddress localAddr, int localPort)

Создаёт сокет и подключает его к указанному удалённому хосту на указанном удалённом порту.

Socket​(InetAddress address, int port)

Создаёт потоковый сокет и подключает его к указанному номеру порта по указанному IP-адресу.

Socket​(InetAddress host, int port, boolean stream)

Устарело.

Используйте DatagramSocket вместо UDP-транспорта.

Socket​(InetAddress address, int port, InetAddress localAddr, int localPort)

Создаёт сокет и подключает его к указанному удалённому адресу на указанном удалённом порту.

Socket​(Proxy proxy)

Создаёт несвязанный сокет, указывая тип прокси, если требуется, независимо от других настроек.

protected Socket​(SocketImpl impl)

Создаёт несвязанный сокет с указанным пользователем 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.

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)

Устанавливает фабрику реализации сокетов клиента для приложения.

void setSoLinger​(boolean on, int linger)

Включить/выключить SO_LINGER со значением таймаута в секундах.

void setSoTimeout​(int timeout)

Включить/выключить SO_TIMEOUT со значением таймаута в миллисекундах.

void setTcpNoDelay​(boolean on)

Включить/выключить TCP_NODELAY (отключение/включение алгоритма Nagle).

void setTrafficClass​(int tc)

Устанавливает октет класса трафика или типа обслуживания в заголовке IP для пакетов, отправляемых из этого сокета.

void shutdownInput()

Устанавливает поток ввода для этого сокета в состояние "конец потока".

void shutdownOutput()

Отключает поток вывода для этого сокета.

Set<SocketOption<?>> supportedOptions()

Возвращает набор параметров сокета, поддерживаемых этим сокетом.

String toString()

Преобразует этот сокет в String.

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

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

Конструкторы

Сокет

public Socket()

Создаёт неподключённый сокет с типом SocketImpl по умолчанию для системы.

С момента:
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 не пусто, менеджер безопасности установлен, и его метод 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 включительно.
См. также:
setSocketImplFactory(java.net.SocketImplFactory), SocketImpl, SocketImplFactory.createSocketImpl(), 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.
См. также:
setSocketImplFactory(java.net.SocketImplFactory), SocketImpl, SocketImplFactory.createSocketImpl(), 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 - boolean, указывающий, является ли это сокетом потока или сокетом дейтаграммы.
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода.
SecurityException - если существует менеджер безопасности, и его метод checkConnect не разрешает операцию.
IllegalArgumentException - если параметр порта находится вне указанного диапазона допустимых значений порта, который составляет от 0 до 65535 включительно.
См. также:
setSocketImplFactory(java.net.SocketImplFactory), SocketImpl, SocketImplFactory.createSocketImpl(), SecurityManager.checkConnect(java.lang.String, int)

Socket

@Deprecated
public Socket(InetAddress host,
              int port,
              boolean stream)
       throws IOException
Устаревший.
Для UDP-транспорта используйте DatagramSocket.

Создает сокет и подключает его к указанному номеру порта на указанном IP-адресе.

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

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

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

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

Параметры:
host - IP-адрес.
port - номер порта.
stream - если true, создать сокет потока; в противном случае создать сокет дейтаграммы.
Исключения:
IOException - если при создании сокета произошла ошибка ввода-вывода.
SecurityException - если существует менеджер безопасности, и его метод checkConnect не разрешает операцию.
IllegalArgumentException - если параметр порта находится вне указанного диапазона допустимых значений порта, который составляет от 0 до 65535 включительно.
NullPointerException - если host равно null.
См. также:
setSocketImplFactory(java.net.SocketImplFactory), SocketImpl, SocketImplFactory.createSocketImpl(), 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 - the SocketAddress
timeout - значение таймаута в миллисекундах.
Исключения:
IOException - если при подключении произошла ошибка
SocketTimeoutException - если таймаут истек до подключения
IllegalBlockingModeException - если у этого сокета есть связанный канал, и канал находится в режиме без блокировки
IllegalArgumentException - если конечная точка равна null или является подклассом SocketAddress, не поддерживаемым этим сокетом
С:
1.4

bind

public void bind(SocketAddress bindpoint)
          throws IOException

Связывает сокет с локальным адресом.

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

Параметры:
bindpoint - адрес для привязки
Исключения:
IOException - если операция привязки завершилась неудачно или сокет уже привязан.
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)

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.

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

setSoLinger

public void setSoLinger(boolean on,
                        int linger)
                 throws SocketException

Включает/выключает SO_LINGER со временем ожидания в секундах. Максимальное значение времени ожидания зависит от платформы. Настройка влияет только на закрытие сокета.

Параметры:
on - нужно ли задерживаться.
linger - время задержки, если задержка включена.
Выбрасывает:
SocketException - если произошла ошибка в протоколе нижнего уровня, например, ошибка TCP.
IllegalArgumentException - если значение задержки отрицательно.
С:
1.1
См. также:
getSoLinger()

getSoLinger

public int getSoLinger()
                throws SocketException

Возвращает настройку для SO_LINGER. -1 означает, что опция отключена. Настройка влияет только на закрытие сокета.

Возвращает:
настройка для SO_LINGER.
Выбрасывает:
SocketException - если произошла ошибка в протоколе нижнего уровня, например, ошибка TCP.
С:
1.1
См. также:
setSoLinger(boolean, int)

sendUrgentData

public void sendUrgentData(int data)
                    throws IOException

Отправляет один байт срочных данных по сокету. Байтом данных является младшие восемь битов параметра data. Срочный байт отправляется после любых предыдущих записей в выходной поток сокета и перед любыми будущими записями в выходной поток.

Параметры:
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() на связанном с этим сокетом входном потоке будет блокироваться только на это время. Если таймаут истекает, генерируется исключение java.net.SocketTimeoutException, но сокет остается валидным. Опция должна быть включена перед началом блокирующей операции, чтобы иметь эффект. Таймаут должен быть > 0. Таймаут 0 интерпретируется как бесконечный таймаут.

Параметры:
timeout - заданный таймаут в миллисекундах.
Выбрасывает:
SocketException - если произошла ошибка в протоколе нижнего уровня, например, ошибка TCP.
С:
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 - нужно ли включить keep-alive для сокета.
Выбрасывает:
SocketException - если произошла ошибка в протоколе нижнего уровня, например, ошибка TCP.
С:
1.3
См. также:
getKeepAlive()

getKeepAlive

public boolean getKeepAlive()
                     throws SocketException

Проверяет, включен ли SO_KEEPALIVE.

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

setTrafficClass

public void setTrafficClass(int tc)
                     throws SocketException

Устанавливает класс трафика или октет типа обслуживания в заголовке IP для пакетов, отправляемых из этого сокета. Так как реализация сетевого уровня может игнорировать это значение, приложения должны рассматривать его как подсказку.

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

Примечания:

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

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

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

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

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

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

getTrafficClass

public int getTrafficClass()
                    throws SocketException

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

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

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

setReuseAddress

public void setReuseAddress(boolean on)
                     throws SocketException

Включает/выключает опцию сокета SO_REUSEADDR.

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

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

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

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

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

getReuseAddress

public boolean getReuseAddress()
                        throws SocketException

Проверяет, включена ли опция SO_REUSEADDR.

Возвращает:
значение 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()

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

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

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

isBound

public boolean isBound()

Возвращает состояние привязки сокета.

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

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

isClosed

public boolean isClosed()

Возвращает состояние закрытия сокета.

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

isInputShutdown

public boolean isInputShutdown()

Возвращает, закрыта ли часть сокета для чтения.

Возвращает:
true, если вход сокета закрыт
С версии:
1.4
См. также:
shutdownInput()

isOutputShutdown

public boolean isOutputShutdown()

Возвращает, закрыта ли часть сокета для записи.

Возвращает:
true, если выход сокета закрыт
С версии:
1.4
См. также:
shutdownOutput()

setSocketImplFactory

public static void setSocketImplFactory(SocketImplFactory fac)
                                 throws IOException

Устанавливает фабрику реализации клиентского сокета для приложения. Фабрика может быть установлена только один раз.

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

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

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

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

setPerformancePreferences

public void setPerformancePreferences(int connectionTime,
                                      int latency,
                                      int bandwidth)

Устанавливает предпочтения производительности для этого сокета.

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

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

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

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

setOption

public <T> Socket setOption(SocketOption<T> name,
                            T value)
                     throws IOException

Устанавливает значение параметра сокета.

Параметры типа:
T - Тип значения параметра сокета
Параметры:
name - Параметр сокета
value - Значение параметра сокета. Значение null может быть допустимым для некоторых параметров.
Возвращаемое значение:
этого сокета Socket
Исключения:
UnsupportedOperationException - если сокет не поддерживает параметр.
IllegalArgumentException - если значение не является допустимым для параметра.
IOException - если произошла ошибка ввода-вывода или сокет закрыт.
SecurityException - если установлен менеджер безопасности, если параметр сокета требует разрешения на безопасность и если у вызывающей стороны нет необходимого разрешения. StandardSocketOptions не требуют никакого разрешения на безопасность.
С момента:
9

getOption

public <T> T getOption(SocketOption<T> name)
                throws IOException

Возвращает значение параметра сокета.

Параметры типа:
T - Тип значения параметра сокета
Параметры:
name - Параметр сокета
Возвращаемое значение:
Значение параметра сокета.
Исключения:
UnsupportedOperationException - если сокет не поддерживает параметр.
IOException - если произошла ошибка ввода-вывода или сокет закрыт.
SecurityException - если установлен менеджер безопасности, если параметр сокета требует разрешения на безопасность и если у вызывающей стороны нет необходимого разрешения. StandardSocketOptions не требуют никакого разрешения на безопасность.
С момента:
9

supportedOptions

public Set<SocketOption<?>> supportedOptions()

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

Возвращаемое значение:
Набор параметров сокета, поддерживаемых этим сокетом. Этот набор может быть пустым, если SocketImpl сокета не может быть создан.
С момента:
9

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

Spec-Zone .ru
спецификации, руководства, описания, API