Класс Socket
- Все реализованные интерфейсы:
-
Closeable,AutoCloseable
- Прямые известные подклассы:
SSLSocket
public class Socket extends Object implements Closeable
Фактическая работа сокета выполняется экземпляром класса SocketImpl.
Класс Socket определяет удобные методы для установки и получения нескольких параметров сокета. Этот класс также определяет методы setOption и getOption для установки и запроса параметров сокета. Сокеты поддерживают следующие параметры:
Также могут поддерживаться дополнительные (специфичные для реализации) параметры.
Название параметра Описание SO_SNDBUFРазмер буфера отправки сокета SO_RCVBUFРазмер буфера приема сокета SO_KEEPALIVEПоддерживать соединение активным SO_REUSEADDRПовторное использование адреса SO_LINGERЗадержка при закрытии, если данные присутствуют (только при работе в блокирующем режиме) TCP_NODELAYОтключить алгоритм Nagle
- С:
- 1.0
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
| Создаёт отключённый сокет. |
||
| Создаёт сокет потокового типа и подключает его к указанному порту на указанном хосте. |
||
|
Устарело. Для UDP-транспорта используйте DatagramSocket. |
||
| Создаёт сокет и подключает его к указанному удалённому хосту по указанному удалённому порту. |
||
| Создаёт сокет потокового типа и подключает его к указанному порту по указанному IP-адресу. |
||
|
Устарело. Для UDP-транспорта используйте DatagramSocket. |
||
| Создаёт сокет и подключает его к указанному удалённому адресу по указанному удалённому порту. |
||
| Создаёт отключённый сокет, указав тип прокси, если таковой требуется, независимо от других настроек. |
||
protected |
Создаёт отключённый сокет с указанным пользователем SocketImpl. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
bind |
Привязывает сокет к локальному адресу. |
void |
close() |
Закрывает этот сокет. |
void |
connect |
Подключает этот сокет к серверу. |
void |
connect |
Подключает этот сокет к серверу со значением таймаута. |
SocketChannel |
getChannel() |
Возвращает уникальный объект SocketChannel, связанный с этим сокетом, если таковой есть. |
InetAddress |
getInetAddress() |
Возвращает адрес, к которому подключен сокет. |
InputStream |
getInputStream() |
Возвращает входной поток для этого сокета. |
boolean |
getKeepAlive() |
Проверяет, включен ли SO_KEEPALIVE. |
InetAddress |
getLocalAddress() |
Возвращает локальный адрес, к которому привязан сокет. |
int |
getLocalPort() |
Возвращает локальный номер порта, к которому привязан этот сокет. |
SocketAddress |
getLocalSocketAddress() |
Возвращает адрес конечной точки, к которой привязан этот сокет. |
boolean |
getOOBInline() |
Проверяет, включен ли SO_OOBINLINE. |
<T> T |
getOption |
Возвращает значение параметра сокета. |
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 |
Отправить один байт срочных данных по сокету. |
void |
setKeepAlive |
Включить/выключить SO_KEEPALIVE. |
void |
setOOBInline |
Включить/выключить SO_OOBINLINE (прием срочных данных TCP). По умолчанию этот параметр отключен, и полученные срочные данные TCP в сокете игнорируются. |
<T> Socket |
setOption |
Устанавливает значение параметра сокета. |
void |
setPerformancePreferences |
Устанавливает предпочтения производительности для этого сокета. |
void |
setReceiveBufferSize |
Устанавливает параметр SO_RCVBUF в указанное значение для этого Socket. |
void |
setReuseAddress |
Включить/выключить параметр сокета SO_REUSEADDR. |
void |
setSendBufferSize |
Устанавливает параметр SO_SNDBUF в указанное значение для этого Socket. |
static void |
setSocketImplFactory |
Устарело. Используйте SocketFactory и подкласс Socket напрямую. |
void |
setSoLinger |
Включить/выключить SO_LINGER с указанным временем ожидания в секундах. |
void |
setSoTimeout |
Включить/выключить SO_TIMEOUT с указанным таймаутом в миллисекундах. |
void |
setTcpNoDelay |
Включить/выключить TCP_NODELAY (отключить/включить алгоритм Nagle). |
void |
setTrafficClass |
Устанавливает октет класса трафика или типа обслуживания в заголовке IP для пакетов, отправляемых из этого сокета. |
void |
shutdownInput() |
Размещает входной поток этого сокета в конце потока. |
void |
shutdownOutput() |
Отключает выходной поток для этого сокета. |
Set |
supportedOptions() |
Возвращает набор параметров сокета, поддерживаемых этим сокетом. |
String |
toString() |
Преобразует этот сокет в String. |
Подробное описание конструкторов
Сокет
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
- См. также:
Сокет
protected Socket(SocketImpl impl) throws SocketException
- Параметры:
-
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 включительно. - См. также:
Сокет
public Socket(InetAddress address, int port) throws IOException
Если приложение указало фабрику реализации клиентского сокета, то метод createSocketImpl этой фабрики вызывается для создания фактической реализации сокета. В противном случае создаётся системная по умолчанию реализация сокета.
Если установлено средство защиты безопасности, то его метод checkConnect вызывается с адресом узла и port в качестве аргументов. Это может привести к SecurityException.
- Параметры:
-
address- IP-адрес. -
port- номер порта. - Исключения:
-
IOException- если при создании сокета произошла ошибка ввода-вывода. -
SecurityException- если средство защиты безопасности существует и его методcheckConnectне разрешает операцию. -
IllegalArgumentException- если параметр порта находится вне допустимого диапазона, который составляет от 0 до 65535 включительно. -
NullPointerException- еслиaddressравно null. - См. также:
Сокет
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- если параметр порта или localPort находится вне допустимого диапазона, который составляет от 0 до 65535 включительно. - С момента:
- 1.1
- См. также:
Сокет
public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException
Если указанный локальный адрес — null, это эквивалентно указанию адреса как любого локального адреса (см. InetAddress.isAnyLocalAddress()).
Локальный номер порта zero позволит системе выбрать свободный порт в ходе операции bind.
Если установлено средство защиты безопасности, то его метод checkConnect вызывается с адресом узла и port в качестве аргументов. Это может привести к SecurityException.
- Параметры:
-
address- удалённый адрес -
port- удалённый порт -
localAddr- локальный адрес, к которому привязывается сокет, илиnullдляanyLocalадреса. -
localPort- локальный порт, к которому привязывается сокет илиzeroдля выбора свободного порта системой. - Исключения:
-
IOException- если при создании сокета произошла ошибка ввода-вывода. -
SecurityException- если средство защиты безопасности существует и его методcheckConnectне разрешает подключение к назначению или его методcheckListenне разрешает привязку к локальному порту. -
IllegalArgumentException- если параметр порта или localPort находится вне допустимого диапазона, который составляет от 0 до 65535 включительно. -
NullPointerException- еслиaddressравно null. - С момента:
- 1.1
- См. также:
Сокет
@Deprecated public Socket(String host, int port, boolean stream) throws IOException
Если указанный узел является 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 включительно. - См. также:
Сокет
@Deprecated public Socket(InetAddress host, int port, boolean stream) throws IOException
Если аргумент 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. - См. также:
Подробное описание методов
connect
public void connect(SocketAddress endpoint) throws IOException
Этот метод может быть прерван в следующих случаях:
- Сокет ассоциирован с
SocketChannel. В этом случае прерывание потока, устанавливающего соединение, закроет базовый канал и вызовет исключениеClosedByInterruptExceptionс установленным состоянием прерывания. - Сокет использует реализацию сокета по умолчанию, и виртуальный поток устанавливает соединение. В этом случае прерывание виртуального потока заставит его проснуться и закрыть сокет. Этот метод затем выбросит
SocketExceptionс установленным состоянием прерывания.
- Параметры:
-
endpoint-SocketAddress - Исключения:
-
IOException- если при подключении произошла ошибка -
IllegalBlockingModeException- если у этого сокета есть связанный канал, и канал находится в режиме без блокировки -
IllegalArgumentException- если конечная точка равна null или является подклассом SocketAddress, не поддерживаемым этим сокетом - С тех пор:
- 1.4
connect
public void connect(SocketAddress endpoint, int timeout) throws IOException
Этот метод может быть прерван в следующих случаях:
- Сокет ассоциирован с
SocketChannel. В этом случае прерывание потока, устанавливающего соединение, закроет базовый канал и вызовет исключениеClosedByInterruptExceptionс установленным состоянием прерывания. - Сокет использует реализацию сокета по умолчанию, и виртуальный поток устанавливает соединение. В этом случае прерывание виртуального потока заставит его проснуться и закрыть сокет. Этот метод затем выбросит
SocketExceptionс установленным состоянием прерывания.
- Параметры:
-
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- если операция привязки завершилась неудачно или сокет уже привязан. -
IllegalArgumentException- если bindpoint является подклассом SocketAddress, не поддерживаемым этим сокетом -
SecurityException- если менеджер безопасности существует и его методcheckListenне разрешает привязку к локальному порту. - С тех пор:
- 1.4
- См. также:
getInetAddress
public InetAddress getInetAddress()
Если сокет был подключён до closed, этот метод будет продолжать возвращать подключённый адрес после закрытия сокета.
- Возвращает:
- удаленный IP-адрес, к которому подключен этот сокет, или
null, если сокет не подключен.
getLocalAddress
public InetAddress getLocalAddress()
Если установлен менеджер безопасности, его метод checkConnect вызывается с локальным адресом и -1 в качестве аргументов, чтобы проверить разрешение операции. Если операция не разрешена, возвращается адрес loopback.
- Возвращает:
- локальный адрес, к которому привязан сокет, адрес обратной петли, если доступ запрещён менеджером безопасности, или адрес подстановки, если сокет закрыт или ещё не привязан.
- С тех пор:
- 1.1
- См. также:
getPort
public int getPort()
Если сокет был подключён до closed, этот метод будет продолжать возвращать номер подключённого порта после закрытия сокета.
- Возвращает:
- удалённый номер порта, к которому подключен этот сокет, или 0, если сокет ещё не подключён.
getLocalPort
public int getLocalPort()
Если сокет был привязан до closed, этот метод будет продолжать возвращать локальный номер порта после закрытия сокета.
- Возвращает:
- локальный номер порта, к которому привязан сокет, или -1, если сокет ещё не привязан.
getRemoteSocketAddress
public SocketAddress getRemoteSocketAddress()
null, если он не подключен. Если сокет был подключен до вызова closed, то этот метод будет продолжать возвращать подключенный адрес после закрытия сокета.
- Возвращает:
- a
SocketAddress, представляющий удалённую конечную точку этого сокета, илиnull, если он ещё не подключен. - С:
- 1.4
- См. также:
getLocalSocketAddress
public SocketAddress getLocalSocketAddress()
Если сокет, привязанный к конечной точке, представленной InetSocketAddress , closed, то этот метод будет продолжать возвращать InetSocketAddress после закрытия сокета. В этом случае адрес возвращаемого InetSocketAddress - это адрес wildcard, а порт - это локальный порт, к которому он был привязан.
Если установлен менеджер безопасности, его метод checkConnect вызывается с локальным адресом и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается SocketAddress, представляющий адрес loopback и локальный порт, к которому привязан этот сокет.
- Возвращает:
- a
SocketAddress, представляющий локальную конечную точку этого сокета, илиSocketAddress, представляющий адрес обратной петли, если это запрещено менеджером безопасности, илиnull, если сокет ещё не привязан. - С:
- 1.4
- См. также:
getChannel
public SocketChannel getChannel()
SocketChannel, связанный с этим сокетом, если таковой есть. У сокета будет канал, если и только если сам канал был создан с помощью методов SocketChannel.open или ServerSocketChannel.accept.
- Возвращает:
- канал сокета, связанный с этим сокетом, или
null, если этот сокет не был создан для канала - С:
- 1.4
getInputStream
public InputStream getInputStream() throws IOException
Если у этого сокета есть связанный канал, то возвращаемый поток ввода делегирует все свои операции каналу. Если канал находится в режиме без блокировки, то операции потока ввода read будут выбрасывать IllegalBlockingModeException.
Чтение из потока ввода может быть прервано в следующих случаях:
- Сокет связан с
SocketChannel. В этом случае прерывание потока, читающего из потока ввода, закроет базовый канал и заставит метод read сгенерироватьClosedByInterruptExceptionс установленным статусом прерывания. - Сокет использует системную реализацию сокета по умолчанию, и виртуальный поток читает из потока ввода. В этом случае прерывание виртуального потока заставит его проснуться и закрыть сокет. Затем метод read сгенерирует
SocketExceptionс установленным статусом прерывания.
В аномальных условиях подлежащее соединение может быть разорвано удалённым хостом или сетевым программным обеспечением (например, сброс соединения в случае TCP-соединений). Когда сетевое программное обеспечение обнаруживает разорванное соединение, для возвращаемого потока ввода применимо следующее:
Сетевое программное обеспечение может отбросить байты, которые буферизируются сокетом. Байты, которые не отбрасываются сетевым программным обеспечением, могут быть прочитаны с помощью
read.Если байты не буферизированы в сокете или все буферизованные байты были извлечены с помощью
read, все последующие вызовыreadсгенерируютIOException.Если байты не буферизированы в сокете, и сокет не был закрыт с помощью
close, тоavailableвернёт0.
Закрытие возвращаемого InputStream закроет ассоциированный сокет.
- Возвращает:
- поток ввода для чтения байтов из этого сокета.
- Исключения:
-
IOException- если при создании потока ввода произошла ошибка ввода-вывода, сокет закрыт, сокет не подключён или ввод сокета был закрыт с помощьюshutdownInput()
getOutputStream
public OutputStream getOutputStream() throws IOException
Если у этого сокета есть связанный канал, то возвращаемый поток вывода делегирует все свои операции каналу. Если канал находится в режиме без блокировки, то операции потока вывода write будут выбрасывать IllegalBlockingModeException.
Запись в поток вывода может быть прервана в следующих случаях:
- Сокет связан с
SocketChannel. В этом случае прерывание потока, записывающего в поток вывода, закроет базовый канал и заставит метод write сгенерироватьClosedByInterruptExceptionс установленным статусом прерывания. - Сокет использует системную реализацию сокета по умолчанию, и виртуальный поток записывает в поток вывода. В этом случае прерывание виртуального потока заставит его проснуться и закрыть сокет. Затем метод write сгенерирует
SocketExceptionс установленным статусом прерывания.
Закрытие возвращаемого OutputStream закроет ассоциированный сокет.
- Возвращает:
- поток вывода для записи байтов в этот сокет.
- Исключения:
-
IOException- если при создании потока вывода произошла ошибка ввода-вывода или сокет не подключён.
setTcpNoDelay
public void setTcpNoDelay(boolean on) throws SocketException
TCP_NODELAY (отключает/включает алгоритм Нагла).- Параметры:
-
on-trueдля включения TCP_NODELAY,falseдля выключения. - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С:
- 1.1
- См. также:
getTcpNoDelay
public boolean getTcpNoDelay() throws SocketException
TCP_NODELAY.- Возвращает:
boolean, указывающее, включен ли или нетTCP_NODELAY.- Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С:
- 1.1
- См. также:
setSoLinger
public void setSoLinger(boolean on, int linger) throws SocketException
SO_LINGER с указанным временем ожидания в секундах. Максимальное значение времени ожидания зависит от платформы. Настройка влияет только на закрытие сокета.- Параметры:
-
on- нужно ли ожидать. -
linger- сколько ждать, если ожидание включено. - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. -
IllegalArgumentException- если значение ожидания отрицательно. - С:
- 1.1
- См. также:
getSoLinger
public int getSoLinger() throws SocketException
SO_LINGER. -1 означает, что опция отключена. Настройка влияет только на закрытие сокета.- Возвращает:
- настройка для
SO_LINGER. - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С:
- 1.1
- См. также:
sendUrgentData
public void sendUrgentData(int data) throws IOException
- Параметры:
-
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
public boolean getOOBInline() throws SocketException
SO_OOBINLINE.- Возвращает:
- значения
boolean, указывающие, включен ли или нетSO_OOBINLINE. - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С версии:
- 1.4
- См. также:
setSoTimeout
public void setSoTimeout(int timeout) throws SocketException
SO_TIMEOUT со указанным таймаутом в миллисекундах. Если этот параметр установлен с положительным значением таймаута, вызов read() на InputStream, связанном с этим сокетом, будет блокироваться только в течение этого времени. Если таймаут истечёт, возникает исключение java.net.SocketTimeoutException, хотя сокет по-прежнему валиден. Таймаут 0 интерпретируется как бесконечный таймаут. Параметр должен быть включён перед входом в блокирующую операцию, чтобы иметь эффект.- Параметры:
-
timeout- указанный таймаут в миллисекундах. - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP -
IllegalArgumentException- еслиtimeoutотрицательно - С версии:
- 1.1
- См. также:
getSoTimeout
public int getSoTimeout() throws SocketException
SO_TIMEOUT. Возвращаемое значение 0 подразумевает, что параметр отключён (т. е. таймаут бесконечен).- Возвращает:
- значение для
SO_TIMEOUT - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С версии:
- 1.1
- См. также:
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
public int getSendBufferSize() throws SocketException
SO_SNDBUF для этого Socket, то есть размер буфера, используемого платформой для вывода в этот Socket.- Возвращает:
- значение параметра
SO_SNDBUFдля этогоSocket. - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С версии:
- 1.2
- См. также:
setReceiveBufferSize
public void setReceiveBufferSize(int size) throws SocketException
SO_RCVBUF для данного Socket со значением указанного значения. Параметр SO_RCVBUF используется кодом сетевого стека платформы в качестве подсказки для размера буфера сети. Увеличение размера буфера приёма может повысить производительность сетевого ввода-вывода для высоконагруженных соединений, а уменьшение — помочь уменьшить очередь входящих данных.
Поскольку SO_RCVBUF — это подсказка, приложения, которые хотят проверить, какой размер был установлен для буферов, должны вызвать getReceiveBufferSize().
Значение SO_RCVBUF также используется для установки TCP-окна приёма, которое объявляется удалённому узлу. Обычно размер окна можно изменять в любое время, когда сокет подключён. Однако, если требуется окно приёма, большее 64K, то это должно быть запрошено **до** подключения сокета к удалённому узлу. Есть два случая, о которых следует помнить:
- Для сокетов, принятых от ServerSocket, это необходимо сделать, вызвав
ServerSocket.setReceiveBufferSize(int)перед привязкой ServerSocket к локальному адресу. - Для клиентских сокетов, setReceiveBufferSize() необходимо вызвать перед подключением сокета к его удалённому узлу.
- Параметры:
-
size- размер, на который нужно установить размер буфера приёма. Это значение должно быть больше 0. - Исключения:
-
IllegalArgumentException- если значение равно 0 или отрицательно. -
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С версии:
- 1.2
- См. также:
getReceiveBufferSize
public int getReceiveBufferSize() throws SocketException
SO_RCVBUF для этого Socket, то есть размер буфера, используемого платформой для ввода в этот Socket.- Возвращает:
- значение параметра
SO_RCVBUFдля этогоSocket. - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С версии:
- 1.2
- См. также:
setKeepAlive
public void setKeepAlive(boolean on) throws SocketException
SO_KEEPALIVE.- Параметры:
-
on- включить или выключить сокет keep alive. - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С версии:
- 1.3
- См. также:
getKeepAlive
public boolean getKeepAlive() throws SocketException
SO_KEEPALIVE.- Возвращает:
- значения
boolean, указывающие, включен ли или нетSO_KEEPALIVE. - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С версии:
- 1.3
- См. также:
setTrafficClass
public void setTrafficClass(int tc) throws SocketException
Значение 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)
Установка битов в поле приоритета может привести к исключению SocketException, указывающему, что операция не разрешена.
Как указывает RFC 1122, раздел 4.2.4.2, совместимая реализация TCP должна, но не обязана, позволять приложению изменять поле TOS в течение срока действия соединения. Таким образом, может ли поле типа службы быть изменено после установления TCP-соединения, зависит от реализации на базовой платформе. Приложения не должны предполагать, что они могут изменить поле TOS после подключения.
Для протокола Интернета версии 6 tc — это значение, которое будет помещено в поле sin6_flowinfo заголовка IP.
- Параметры:
-
tc- значениеintдля набора битов. - Исключения:
-
SocketException- если возникла ошибка при установке класса трафика или байта типа службы - С версии:
- 1.4
- См. также:
getTrafficClass
public int getTrafficClass() throws SocketException
Поскольку реализация базовой сети может игнорировать класс трафика или тип службы, установленный с помощью setTrafficClass(int), этот метод может вернуть значение, отличное от ранее установленного с помощью метода setTrafficClass(int) в этом сокете.
- Возвращает:
- установленный класс трафика или тип службы
- Исключения:
-
SocketException- если возникла ошибка при получении значения класса трафика или типа службы. - С версии:
- 1.4
- См. также:
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
public boolean getReuseAddress() throws SocketException
SO_REUSEADDR.- Возвращает:
- логическое значение, указывающее, включен ли параметр
SO_REUSEADDR. - Исключения:
-
SocketException- если возникла ошибка в базовом протоколе, например, ошибка TCP. - С версии:
- 1.4
- См. также:
close
public void close() throws IOException
Любой поток, который в данный момент заблокирован в операции ввода-вывода над этим сокетом, сгенерирует исключение SocketException.
После закрытия сокет недоступен для дальнейшего использования в сети (т.е. его нельзя повторно подключить или перепривязать). Необходимо создать новый сокет.
Закрытие этого сокета также закроет сокетные InputStream и OutputStream.
Если у этого сокета есть связанный канал, он также закрывается.
- Определено в:
-
closeв интерфейсеAutoCloseable - Определено в:
-
closeв интерфейсеCloseable - Исключения:
-
IOException- если при закрытии сокета произошла ошибка ввода-вывода. - См. также:
shutdownInput
public void shutdownInput() throws IOException
Если вы считываете данные из входного потока сокета после вызова этого метода для сокета, метод available потока вернет 0, а методы read вернут -1 (конец потока).
- Исключения:
-
IOException- если при закрытии этого сокета произошла ошибка ввода-вывода. - С версии:
- 1.3
- См. также:
shutdownOutput
public void shutdownOutput() throws IOException
- Исключения:
-
IOException- если при закрытии этого сокета произошла ошибка ввода-вывода. - С версии:
- 1.3
- См. также:
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
- См. также:
isClosed
public boolean isClosed()
- Возвращает:
- true, если сокет закрыт
- С версии:
- 1.4
- См. также:
isInputShutdown
public boolean isInputShutdown()
- Возвращает:
- true, если вход сокета закрыт
- С версии:
- 1.4
- См. также:
isOutputShutdown
public boolean isOutputShutdown()
- Возвращает:
- true, если выходной поток сокета закрыт
- С тех пор:
- 1.4
- См. также:
setSocketImplFactory
@Deprecated(since="17") public static void setSocketImplFactory(SocketImplFactory fac) throws IOException
SocketFactory и подкласс Socket напрямую. Этот метод в ранних версиях JDK позволял заменить системную реализацию
Socket. Он устарел в основном с Java 1.4. Если необходимо, можно создать Socket для использования пользовательской реализации, расширив Socket и используя защищённый конструктор protected constructor, принимающий реализацию в качестве параметра. При создании нового клиентского сокета приложением вызывается метод createSocketImpl фабрики реализации сокета для создания фактической реализации сокета.
Передача null в метод — это ничто, если фабрика ещё не была установлена.
Если установлен менеджер безопасности, этот метод сначала вызовет метод checkSetFactory менеджера безопасности, чтобы убедиться, что операция разрешена. Это может привести к SecurityException.
- Параметры:
-
fac- требуемая фабрика. - Исключения:
-
IOException- если при установке фабрики сокета произошла ошибка ввода-вывода. -
SocketException- если фабрика уже определена. -
SecurityException- если менеджер безопасности существует и его методcheckSetFactoryне разрешает операцию. - См. также:
setPerformancePreferences
public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
Сокеты по умолчанию используют протокол TCP/IP. Некоторые реализации могут предлагать альтернативные протоколы, которые имеют разные характеристики производительности по сравнению с TCP/IP. Этот метод позволяет приложению выразить свои предпочтения относительно того, как эти компромиссы должны быть сделаны, когда реализация выбирает из доступных протоколов.
Предпочтения производительности описываются тремя целыми числами, значения которых указывают на относительную важность короткого времени подключения, низкой задержки и высокой пропускной способности. Абсолютные значения целых чисел не имеют значения; для выбора протокола значения просто сравниваются, а большие значения указывают на более сильные предпочтения. Отрицательные значения означают более низкий приоритет, чем положительные значения. Если, например, приложение отдает предпочтение короткому времени подключения перед низкой задержкой и высокой пропускной способностью, то оно может вызвать этот метод со значениями (1, 0, 0). Если приложение отдает предпочтение высокой пропускной способности перед низкой задержкой, а низкой задержке перед коротким временем подключения, то оно может вызвать этот метод со значениями (0, 1, 2).
Вызов этого метода после подключения данного сокета не окажет никакого влияния.
- Параметры:
-
connectionTime- целое число, выражающее относительную важность короткого времени соединения -
latency- целое число, выражающее относительную важность низкой задержки -
bandwidth- целое число, выражающее относительную важность высокой пропускной способности - С тех пор:
- 1.5
setOption
public <T> Socket setOption(SocketOption<T> name, T value) throws IOException
- Параметры типа:
-
T- тип значения параметра сокета - Параметры:
-
name- параметр сокета -
value- значение параметра сокета. Значениеnullможет быть допустимым для некоторых параметров. - Возвращает:
- this Socket
- Исключения:
-
UnsupportedOperationException- если сокет не поддерживает параметр. -
IllegalArgumentException- если значение не является допустимым для параметра. -
IOException- если произошла ошибка ввода-вывода или сокет закрыт. -
null- если имяnull -
SecurityException- если установлен менеджер безопасности, и если параметр сокета требует разрешения безопасности, и если у вызывающего объекта нет требуемого разрешения.StandardSocketOptionsне требуют каких-либо разрешений безопасности. - С тех пор:
- 9
getOption
public <T> T getOption(SocketOption<T> name) throws IOException
- Параметры типа:
-
T- тип значения параметра сокета - Параметры:
-
name- параметр сокета - Возвращает:
- Значение параметра сокета.
- Исключения:
-
UnsupportedOperationException- если сокет не поддерживает параметр. -
IOException- если произошла ошибка ввода-вывода или сокет закрыт. -
null- если имяnull -
SecurityException- если установлен менеджер безопасности, и если параметр сокета требует разрешения безопасности, и если у вызывающего объекта нет требуемого разрешения.StandardSocketOptionsне требуют каких-либо разрешений безопасности. - С тех пор:
- 9
supportedOptions
public Set<SocketOption<?>> supportedOptions()
- Возвращает:
- Множество поддерживаемых параметров сокета. Это множество может быть пустым, если SocketImpl сокета нельзя создать.
- С тех пор:
- 9
© 1993, 2023, 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/21/docs/api/java.base/java/net/Socket.html