Класс 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
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
| Создаёт несвязанный сокет. |
||
| Создаёт потоковый сокет и подключает его к указанному номеру порта на указанном хосте. |
||
|
Устарело. Используйте DatagramSocket вместо UDP-транспорта. |
||
| Создаёт сокет и подключает его к указанному удалённому хосту на указанном удалённом порту. |
||
| Создаёт потоковый сокет и подключает его к указанному номеру порта по указанному IP-адресу. |
||
|
Устарело. Используйте DatagramSocket вместо UDP-транспорта. |
||
| Создаёт сокет и подключает его к указанному удалённому адресу на указанном удалённом порту. |
||
| Создаёт несвязанный сокет, определяя тип прокси-сервера (если используется) независимо от других настроек. |
||
protected |
Создаёт несвязанный сокет с указанным пользователем SocketImpl. |
Краткое описание методов
| Modifier and Type | Method | Описание |
|---|---|---|
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 (отключение/включение алгоритма Найгла). |
void |
setTrafficClass |
Устанавливает байт класса трафика или типа обслуживания в заголовке IP для пакетов, отправленных из этого сокета. |
void |
shutdownInput() |
Устанавливает поток ввода для этого сокета в конец потока. |
void |
shutdownOutput() |
Отключает поток вывода для этого сокета. |
Set<SocketOption<?>> |
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- если параметр порта или локальный порт находятся вне допустимого диапазона (от 0 до 65535 включительно). - С момента:
- 1.1
- См. также:
Сокет
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
- См. также:
Сокет
@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- флаг, указывающий, является ли это сокет потокового или дейтаграммного типа. - Исключения:
-
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
- Параметры:
endpoint-SocketAddress- Исключения:
IOException- если при подключении произошла ошибкаIllegalBlockingModeException- если у этого сокета есть связанный канал, и канал находится в режиме без блокировкиIllegalArgumentException- если конечная точка равна null или является подклассом SocketAddress, не поддерживаемым этим сокетом- С:
- 1.4
connect
public void connect(SocketAddress endpoint, int timeout) throws IOException
- Параметры:
endpoint-SocketAddresstimeout- значение таймаута в миллисекундах.- Исключения:
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
- См. также:
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, то этот метод будет продолжать возвращать подключённый адрес после закрытия сокета.
- Возвращает:
- объект
SocketAddress, представляющий удалённую конечную точку этого сокета, илиnullесли сокет ещё не подключён. - С:
- 1.4
- См. также:
getLocalSocketAddress
public SocketAddress getLocalSocketAddress()
Если сокет, привязанный к конечной точке, представленной InetSocketAddress , closed, то этот метод продолжит возвращать InetSocketAddress после закрытия сокета. В этом случае адрес возвращаемого InetSocketAddress — адрес wildcard, а порт — локальный порт, к которому он был привязан.
Если установлен менеджер безопасности, его метод checkConnect вызывается с локальным адресом и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается SocketAddress, представляющий адрес loopback и локальный порт, к которому привязан этот сокет.
- Возвращает:
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.
В аномальных условиях подключение может быть прервано удаленным хостом или сетевым программным обеспечением (например, при сбросе соединения в случае 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
public boolean getTcpNoDelay() throws SocketException
TCP_NODELAY.- Возвращает:
- значение, указывающее, включен или нет
TCP_NODELAY. - Издаёт исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С момента:
- 1.1
- См. также:
setSoLinger
public void setSoLinger(boolean on, int linger) throws SocketException
SO_LINGER со временем ожидания в секундах. Максимальное значение таймаута зависит от платформы. Настройка влияет только на закрытие сокета.- Параметры:
-
on- оставлять или нет. -
linger- время ожидания, если оставлять - true. - Издаёт исключения:
-
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.- Возвращает:
- значение, указывающее, включен или нет
SO_OOBINLINE. - Издаёт исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С момента:
- 1.4
- См. также:
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
public int getSoTimeout() throws SocketException
SO_TIMEOUT. 0 возвращается, если параметр отключён (т.е., таймаут бесконечен).- Returns:
- значение параметра
SO_TIMEOUT - Throws:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. - Since:
- 1.1
- See Also:
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
public int getSendBufferSize() throws SocketException
SO_SNDBUF для данного Socket, т.е. размер буфера, используемого платформой для вывода в данный Socket.- Returns:
- значение параметра
SO_SNDBUFдля данногоSocket. - Throws:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. - Since:
- 1.2
- See Also:
setReceiveBufferSize
public void setReceiveBufferSize(int size) throws SocketException
SO_RCVBUF для данного Socket. Параметр SO_RCVBUF используется кодом сетевого стека платформы как подсказка для размера буферов ввода-вывода сетевого уровня. Увеличение размера буфера приема может повысить производительность сетевого ввода-вывода для соединений с высоким объёмом данных, а уменьшение - помочь снизить накопление входящих данных.
Поскольку SO_RCVBUF является подсказкой, приложения, которые хотят проверить установленный размер буферов, должны вызвать getReceiveBufferSize().
Значение SO_RCVBUF также используется для установки TCP-окна приема, которое объявляется удалённому узлу. Как правило, размер окна можно изменять в любое время, когда сокет подключен. Однако, если требуется окно приема больше 64 Кб, это необходимо запросить **до** подключения сокета к удалённому узлу. Есть два случая:
- Для сокетов, полученных из ServerSocket, это необходимо сделать, вызвав
ServerSocket.setReceiveBufferSize(int)перед связыванием ServerSocket с локальным адресом. - Для клиентских сокетов, setReceiveBufferSize() необходимо вызвать до подключения сокета к удалённому узлу.
- Parameters:
-
size- размер, на который необходимо установить буфер приема. Это значение должно быть больше 0. - Throws:
-
IllegalArgumentException- если значение равно 0 или отрицательно. -
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. - Since:
- 1.2
- See Also:
getReceiveBufferSize
public int getReceiveBufferSize() throws SocketException
SO_RCVBUF для данного Socket, т.е. размер буфера, используемого платформой для ввода в данный Socket.- Returns:
- значение параметра
SO_RCVBUFдля данногоSocket. - Throws:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. - Since:
- 1.2
- See Also:
setKeepAlive
public void setKeepAlive(boolean on) throws SocketException
SO_KEEPALIVE.- Parameters:
-
on- нужно ли включить keep-alive для сокета. - Throws:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. - Since:
- 1.3
- See Also:
getKeepAlive
public boolean getKeepAlive() throws SocketException
SO_KEEPALIVE.- Returns:
- значение
boolean, указывающее, включён лиSO_KEEPALIVE. - Throws:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. - Since:
- 1.3
- See Also:
setTrafficClass
public void setTrafficClass(int tc) throws SocketException
Значение 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)
Установка битов в поле приоритета может привести к 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
public int getTrafficClass() throws SocketException
Поскольку базовая реализация сети может игнорировать класс трафика или тип сервиса, установленный с помощью setTrafficClass(int), этот метод может возвращать значение, отличное от ранее установленного с помощью метода setTrafficClass(int) в данном сокете.
- Returns:
- уже установленный класс трафика или тип сервиса
- Throws:
-
SocketException- если произошла ошибка при получении значения класса трафика или типа сервиса. - Since:
- 1.4
- See Also:
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
public boolean getReuseAddress() throws SocketException
SO_REUSEADDR.- Returns:
- значение, указывающее, включена или выключена
SO_REUSEADDR. - Throws:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. - Since:
- 1.4
- See Also:
close
public void close() throws IOException
Любой поток, заблокированный в операции ввода-вывода на этом сокете, бросит SocketException.
После закрытия сокет недоступен для дальнейшего использования в сети (его нельзя переподключить или перепривязать). Необходимо создать новый сокет.
Закрытие этого сокета также закроет потоки ввода InputStream и вывода OutputStream этого сокета.
Если у этого сокета есть связанный канал, то канал также будет закрыт.
- Specified by:
-
closeв интерфейсеAutoCloseable - Specified by:
-
closeв интерфейсеCloseable - Throws:
-
IOException- если при закрытии сокета произошла ошибка ввода-вывода. - See Also:
shutdownInput
public void shutdownInput() throws IOException
Если вы читаете из потока ввода сокета после вызова этого метода для сокета, метод available потока вернёт 0, а методы read вернут -1 (конец потока).
- Throws:
-
IOException- если при закрытии этого сокета произошла ошибка ввода-вывода. - Since:
- 1.3
- See Also:
shutdownOutput
public void shutdownOutput() throws IOException
- Throws:
-
IOException- если при закрытии этого сокета произошла ошибка ввода-вывода. - Since:
- 1.3
- See Also:
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:
isClosed
public boolean isClosed()
- Returns:
- true, если сокет закрыт
- Since:
- 1.4
- See Also:
isInputShutdown
public boolean isInputShutdown()
- Returns:
- true, если входной поток сокета закрыт
- Since:
- 1.4
- See Also:
isOutputShutdown
public boolean isOutputShutdown()
- Returns:
- true, если выходной поток сокета закрыт
- Since:
- 1.4
- See Also:
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:
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