Класс Socket
- Все реализуемые интерфейсы:
Closeable, AutoCloseable
- Прямые известные подклассы:
SSLSocket
public class Socket extends Object implements Closeable
Фактическая работа сокета выполняется экземпляром класса SocketImpl.
Класс Socket определяет удобные методы для установки и получения значений нескольких параметров сокета. Этот класс также определяет методы setOption и getOption для установки и получения значений параметров сокета. Объект Socket поддерживает следующие параметры:
Также могут поддерживаться дополнительные параметры (зависящие от реализации).
Имя параметра Описание SO_SNDBUFРазмер буфера отправки сокета SO_RCVBUFРазмер буфера приёма сокета SO_KEEPALIVEПоддержание соединения активным SO_REUSEADDRПовторное использование адреса SO_LINGERОжидание при закрытии, если имеются данные (только при настройке неблокирующего режима) TCP_NODELAYОтключение алгоритма Нагла
- Начиная с:
- 1.0
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
| Создаёт неподключённый сокет. |
||
| Создаёт потоковый сокет и подключает его к указанному номеру порта на узле с заданным именем. |
||
|
Устарел, будет удалён: этот элемент API планируется удалить в будущей версии. |
||
| Создаёт сокет и подключает его к указанному удалённому узлу на указанном удалённом порту. |
||
| Создаёт потоковый сокет и подключает его к указанному номеру порта по указанному IP-адресу. |
||
|
Устарел, будет удалён: этот элемент API планируется удалить в будущей версии. Параметр stream в ранних выпусках JDK позволял создавать Socket, использующий дейтаграммный сокет. |
||
| Создаёт сокет и подключает его к указанному удалённому адресу на указанном удалённом порту. |
||
| Создаёт неподключённый сокет, указывая тип прокси (если он используется), который следует использовать независимо от других настроек. |
||
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. Возвращаемое значение -1 означает, что параметр отключён. |
int |
getSoTimeout() |
Возвращает значение параметра SO_TIMEOUT. Возвращаемое значение 0 означает, что параметр отключён (то есть время ожидания не ограничено). |
boolean |
getTcpNoDelay() |
Проверяет, включён ли параметр TCP_NODELAY. |
int |
getTrafficClass() |
Получает класс трафика или тип обслуживания в IP-заголовке пакетов, отправляемых этим сокетом |
boolean |
isBound() |
Возвращает состояние привязки сокета. |
boolean |
isClosed() |
Возвращает состояние закрытия сокета. |
boolean |
isConnected() |
Возвращает состояние подключения сокета. |
boolean |
isInputShutdown() |
Возвращает, закрыта ли принимающая половина соединения сокета. |
boolean |
isOutputShutdown() |
Возвращает, закрыта ли передающая половина соединения сокета. |
void |
sendUrgentData |
Отправляет через сокет один байт срочных данных. |
void |
setKeepAlive |
Включает или отключает параметр SO_KEEPALIVE. |
void |
setOOBInline |
Включает или отключает параметр SO_OOBINLINE (приём срочных данных TCP). По умолчанию этот параметр отключён, а полученные через сокет срочные данные TCP молча отбрасываются. |
<T> Socket |
setOption |
Устанавливает значение параметра сокета. |
void |
setPerformancePreferences |
Задаёт приоритеты производительности для этого сокета. |
void |
setReceiveBufferSize |
Устанавливает для этого Socket указанное значение параметра SO_RCVBUF. |
void |
setReuseAddress |
Включает или отключает параметр сокета SO_REUSEADDR. |
void |
setSendBufferSize |
Устанавливает для этого Socket указанное значение параметра SO_SNDBUF. |
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 |
supportedOptions() |
Возвращает набор параметров сокета, поддерживаемых этим сокетом. |
String |
toString() |
Преобразует этот сокет в String. |
Подробное описание конструкторов
Socket
public Socket()
Если приложение указало фабрику реализации клиентских сокетов, для создания фактической реализации сокета вызывается метод createSocketImpl этой фабрики. В противном случае создается реализация сокета, используемая по умолчанию в системе.
- Начиная с:
- 1.1
Socket
public Socket(Proxy proxy)
Примеры:
-
Socket s = new Socket(Proxy.NO_PROXY);создаст обычный сокет, игнорируя любые другие настройки прокси. -
Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socks.mydom.com", 1080)));создаст сокет, подключающийся через указанный прокси-сервер SOCKS.
- Параметры:
-
proxy— объектProxy, указывающий, какой тип прокси следует использовать. - Исключения:
-
IllegalArgumentException— если прокси имеет недопустимый тип илиnull. - Начиная с:
- 1.5
- См. также:
Socket
protected Socket(SocketImpl impl) throws SocketException
- Параметры:
-
impl— экземпляр SocketImpl, который подкласс желает использовать для Socket. - Исключения:
-
SocketException— если в базовом протоколе произошла ошибка, например ошибка TCP. - Начиная с:
- 1.1
Socket
public Socket(String host, int port) throws UnknownHostException, IOException
Если указанный хост — null, это эквивалентно указанию адреса в виде InetAddress.getByName(null). Иными словами, это эквивалентно указанию адреса интерфейса обратной петли.
Если приложение указало фабрику реализации клиентских сокетов, для создания фактической реализации сокета вызывается метод createSocketImpl этой фабрики. В противном случае создается реализация сокета, используемая по умолчанию в системе.
- Параметры:
-
host— имя хоста илиnullдля адреса обратной петли. -
port— номер порта. - Исключения:
-
UnknownHostException— если IP-адрес хоста не удалось определить. -
IOException— если при создании сокета произошла ошибка ввода-вывода. -
IllegalArgumentException— если значение параметра порта выходит за пределы допустимого диапазона портов от 0 до 65535 включительно.
Socket
public Socket(InetAddress address, int port) throws IOException
Если приложение указало фабрику реализации клиентских сокетов, для создания фактической реализации сокета вызывается метод createSocketImpl этой фабрики. В противном случае создается реализация сокета, используемая по умолчанию в системе.
- Параметры:
-
address— IP-адрес. -
port— номер порта. - Исключения:
-
IOException— если при создании сокета произошла ошибка ввода-вывода. -
IllegalArgumentException— если значение параметра порта выходит за пределы допустимого диапазона портов от 0 до 65535 включительно. -
NullPointerException— еслиaddressимеет значение null.
Socket
public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException
Если указанный хост — null, это эквивалентно указанию адреса в виде InetAddress.getByName(null). Иными словами, это эквивалентно указанию адреса интерфейса обратной петли.
Если в качестве номера локального порта указать zero, система выберет свободный порт во время операции bind.
- Параметры:
-
host— имя удаленного хоста илиnullдля адреса обратной петли. -
port— удаленный порт -
localAddr— локальный адрес, к которому привязан сокет, илиnullдля адресаanyLocal. -
localPort— локальный порт, к которому привязан сокет, илиzeroдля свободного порта, выбранного системой. - Исключения:
-
IOException— если при создании сокета произошла ошибка ввода-вывода. -
IllegalArgumentException— если значение параметра порта или localPort выходит за пределы допустимого диапазона портов от 0 до 65535 включительно. - Начиная с:
- 1.1
Socket
public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException
Если указанный локальный адрес — null, это эквивалентно указанию адреса AnyLocal (см. InetAddress.isAnyLocalAddress()).
Если в качестве номера локального порта указать zero, система выберет свободный порт во время операции bind.
- Параметры:
-
address— удаленный адрес -
port— удаленный порт -
localAddr— локальный адрес, к которому привязан сокет, илиnullдля адресаanyLocal. -
localPort— локальный порт, к которому привязан сокет, илиzeroдля свободного порта, выбранного системой. - Исключения:
-
IOException— если при создании сокета произошла ошибка ввода-вывода. -
IllegalArgumentException— если значение параметра порта или localPort выходит за пределы допустимого диапазона портов от 0 до 65535 включительно. -
NullPointerException— еслиaddressимеет значение null. - Начиная с:
- 1.1
Socket
@Deprecated(forRemoval=true, since="1.1") public Socket(String host, int port, boolean stream) throws IOException
stream предоставлял в ранних версиях JDK возможность создать Socket, использующий дейтаграммный сокет. Эта возможность больше не существует. Вместо этого для дейтаграммных сокетов используйте DatagramSocket. Если указанный хост — null, это эквивалентно указанию адреса в виде InetAddress.getByName(null). Иными словами, это эквивалентно указанию адреса интерфейса обратной петли.
Если приложение указало фабрику реализации клиентских сокетов, для создания фактической реализации сокета вызывается метод createSocketImpl этой фабрики. В противном случае создается реализация сокета, используемая по умолчанию в системе.
- Параметры:
-
host— имя хоста илиnullдля адреса обратной петли. -
port— номер порта. -
stream— должно быть true; значение false не допускается. - Исключения:
-
IOException— если при создании сокета произошла ошибка ввода-вывода. -
IllegalArgumentException— если параметр stream равенfalseили значение параметра порта выходит за пределы допустимого диапазона портов от 0 до 65535 включительно.
Socket
@Deprecated(forRemoval=true, since="1.1") public Socket(InetAddress host, int port, boolean stream) throws IOException
stream предоставлял в ранних версиях JDK возможность создать Socket, использующий дейтаграммный сокет. Эта возможность больше не существует. Вместо этого для дейтаграммных сокетов используйте DatagramSocket.Если приложение указало фабрику реализации клиентских сокетов, для создания фактической реализации сокета вызывается метод createSocketImpl этой фабрики. В противном случае создается реализация сокета, используемая по умолчанию в системе.
- Параметры:
-
host— IP-адрес. -
port— номер порта. -
stream— должно быть true; значение false не допускается. - Исключения:
-
IOException— если при создании сокета произошла ошибка ввода-вывода. -
IllegalArgumentException— если параметр stream равенfalseили значение параметра порта выходит за пределы допустимого диапазона портов от 0 до 65535 включительно. -
NullPointerException— еслиhostимеет значение null.
Подробное описание методов
connect
public void connect(SocketAddress endpoint) throws IOException
Если установить соединение невозможно, сокет закрывается, а также выбрасывается исключение IOException.
Этот метод может быть прерван в следующих случаях:
- Сокет связан с
SocketChannel. В этом случае прерывание потока, устанавливающего соединение, закроет базовый канал и приведет к тому, что метод выброситClosedByInterruptExceptionс установленным статусом прерывания. - Сокет использует системную реализацию по умолчанию, а соединение устанавливает виртуальный поток. В этом случае прерывание виртуального потока приведет к его пробуждению и закрытию сокета. Затем этот метод выбросит
SocketExceptionс установленным статусом прерывания.
- Параметры:
-
endpoint—SocketAddress - Исключения:
-
IOException— если при подключении произошла ошибка, сокет уже подключен или сокет закрыт -
UnknownHostException— если установить соединение не удалось, поскольку конечная точка представляет собой неразрешенныйInetSocketAddress -
IllegalBlockingModeException— если с этим сокетом связан канал и он работает в неблокирующем режиме -
IllegalArgumentException— если конечная точка равна null или является подклассом SocketAddress, не поддерживаемым этим сокетом - Начиная с:
- 1.4
connect
public void connect(SocketAddress endpoint, int timeout) throws IOException
Если установить соединение невозможно или время ожидания истекает до его установления, сокет закрывается, а также выбрасывается исключение IOException.
Этот метод может быть прерван в следующих случаях:
- Сокет связан с
SocketChannel. В этом случае прерывание потока, устанавливающего соединение, закроет базовый канал и приведет к тому, что метод выброситClosedByInterruptExceptionс установленным статусом прерывания. - Сокет использует системную реализацию по умолчанию, а соединение устанавливает виртуальный поток. В этом случае прерывание виртуального потока приведет к его пробуждению и закрытию сокета. Затем этот метод выбросит
SocketExceptionс установленным статусом прерывания.
- Параметры:
-
endpoint—SocketAddress -
timeout— время ожидания в миллисекундах. - Исключения:
-
IOException— если при подключении произошла ошибка, сокет уже подключен или сокет закрыт -
SocketTimeoutException— если время ожидания истекло до установления соединения -
UnknownHostException— если установить соединение не удалось, поскольку конечная точка представляет собой неразрешенныйInetSocketAddress -
IllegalBlockingModeException— если с этим сокетом связан канал и он работает в неблокирующем режиме -
IllegalArgumentException— если конечная точка равна null или является подклассом SocketAddress, не поддерживаемым этим сокетом, либо еслиtimeoutотрицательно - Начиная с:
- 1.4
bind
public void bind(SocketAddress bindpoint) throws IOException
Если адрес равен null, система выберет эфемерный порт и допустимый локальный адрес для привязки сокета.
- Параметры:
-
bindpoint—SocketAddress, к которому следует выполнить привязку - Исключения:
-
IOException— если операция привязки завершилась неудачно, сокет уже привязан или сокет закрыт. -
IllegalArgumentException— если bindpoint является подклассом SocketAddress, не поддерживаемым этим сокетом - Начиная с:
- 1.4
- См. также:
getInetAddress
public InetAddress getInetAddress()
Если сокет был подключен до того, как его closed, этот метод продолжит возвращать адрес подключения и после закрытия сокета.
- Возвращает:
- удаленный IP-адрес, к которому подключен этот сокет, или
null, если сокет не подключен.
getLocalAddress
public InetAddress getLocalAddress()
- Возвращает:
- локальный адрес, к которому привязан сокет, или адрес-шаблон, если сокет закрыт или еще не привязан.
- Начиная с:
- 1.1
getPort
public int getPort()
Если сокет был подключен до того, как его closed, этот метод продолжит возвращать номер порта подключения и после закрытия сокета.
- Возвращает:
- номер удаленного порта, к которому подключен этот сокет, или 0, если сокет еще не подключен.
getLocalPort
public int getLocalPort()
Если сокет был привязан до того, как его closed, этот метод продолжит возвращать номер локального порта и после закрытия сокета.
- Возвращает:
- номер локального порта, к которому привязан сокет, или -1, если сокет еще не привязан.
getRemoteSocketAddress
public SocketAddress getRemoteSocketAddress()
null, если сокет не подключен. Если сокет был подключен до того, как его closed, этот метод продолжит возвращать адрес подключения и после закрытия сокета.
- Возвращает:
- объект
SocketAddress, представляющий удаленную конечную точку этого сокета, илиnull, если сокет еще не подключен. - Начиная с:
- 1.4
- См. также:
getLocalSocketAddress
public SocketAddress getLocalSocketAddress()
Если сокет, привязанный к конечной точке, представленной объектом InetSocketAddress , closed, этот метод продолжит возвращать объект InetSocketAddress и после закрытия сокета. В этом случае адрес возвращенного объекта InetSocketAddress — адрес wildcard, а его порт — локальный порт, к которому был привязан сокет.
- Возвращает:
- объект
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. В этом случае прерывание потока, читающего из потока ввода, закроет базовый канал и приведет к тому, что метод чтения выброситClosedByInterruptExceptionс установленным статусом прерывания. - Сокет использует системную реализацию по умолчанию, а чтение из потока ввода выполняет виртуальный поток. В этом случае прерывание виртуального потока приведет к его пробуждению и закрытию сокета. Затем метод чтения выбросит
SocketExceptionс установленным статусом прерывания.
При ненормальных условиях удаленный хост или сетевое программное обеспечение могут разорвать базовое соединение (например, сбросить соединение в случае TCP). При обнаружении сетевым программным обеспечением разрыва соединения к возвращенному потоку ввода применяются следующие правила:
Сетевое программное обеспечение может отбросить байты, буферизованные сокетом. Байты, не отброшенные сетевым программным обеспечением, можно прочитать с помощью
read.Если на сокете нет буферизованных байтов или все буферизованные байты были получены с помощью
read, все последующие вызовыreadвыбросят исключениеIOException.Если на сокете нет буферизованных байтов и сокет не был закрыт с помощью
close, вызовavailableвернет0.
Закрытие возвращенного InputStream закроет связанный сокет.
- Возвращает:
- поток ввода для чтения байтов из этого сокета.
- Исключения:
-
IOException— если при создании потока ввода произошла ошибка ввода-вывода, сокет закрыт, сокет не подключен или ввод сокета был отключен с помощьюshutdownInput()
getOutputStream
public OutputStream getOutputStream() throws IOException
Если с этим сокетом связан канал, возвращенный поток вывода делегирует ему все операции. Если канал работает в неблокирующем режиме, операции write потока вывода выбрасывают исключение IllegalBlockingModeException.
Запись в поток вывода может быть прервана в следующих случаях:
- Сокет связан с
SocketChannel. В этом случае прерывание потока, записывающего в поток вывода, закроет базовый канал и приведет к тому, что метод записи выброситClosedByInterruptExceptionс установленным статусом прерывания. - Сокет использует системную реализацию по умолчанию, а запись в поток вывода выполняет виртуальный поток. В этом случае прерывание виртуального потока приведет к его пробуждению и закрытию сокета. Затем метод записи выбросит
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— продолжительность ожидания, если параметр on имеет значение 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.- Возвращает:
- значение
boolean, указывающее, включен ли параметрSO_OOBINLINE. - Исключения:
-
SocketException— если возникает ошибка в базовом протоколе, например ошибка TCP, или если сокет закрыт. - С версии:
- 1.4
- См. также:
setSoTimeout
public void setSoTimeout(int timeout) throws SocketException
SO_TIMEOUT с указанным временем ожидания в миллисекундах. Если для этого параметра задано положительное значение времени ожидания, вызов read() для InputStream, связанного с этим Socket, будет блокироваться не дольше указанного времени. По истечении времени ожидания возникает исключение java.net.SocketTimeoutException, однако Socket остается действительным. Нулевое время ожидания означает бесконечное ожидание. Чтобы параметр действовал, его необходимо включить до начала блокирующей операции.- Параметры:
-
timeout— указанное время ожидания в миллисекундах. - Исключения:
-
SocketException— если возникает ошибка в базовом протоколе, например ошибка TCP, или если сокет закрыт. -
IllegalArgumentException— еслиtimeoutотрицательно - С версии:
- 1.1
- См. также:
getSoTimeout
public int getSoTimeout() throws SocketException
SO_TIMEOUT. Возвращаемое значение 0 означает, что параметр отключен (то есть время ожидания не ограничено).- Возвращает:
- значение параметра
SO_TIMEOUT - Исключения:
-
SocketException— если возникает ошибка в базовом протоколе, например ошибка TCP, или если сокет закрыт. - С версии:
- 1.1
- См. также:
setSendBufferSize
public void setSendBufferSize(int size) throws SocketException
Socket значение параметра SO_SNDBUF. Параметр SO_SNDBUF используется сетевым кодом платформы как подсказка о размере базовых буферов сетевого ввода-вывода. Поскольку SO_SNDBUF является подсказкой, приложениям, которым нужно проверить фактический размер буферов, следует вызвать getSendBufferSize().
- Параметры:
-
size— размер буфера отправки. Значение должно быть больше 0. - Исключения:
-
SocketException— если возникает ошибка в базовом протоколе, например ошибка TCP, или если сокет закрыт. -
IllegalArgumentException— если значение равно 0 или отрицательно. - С версии:
- 1.2
- См. также:
getSendBufferSize
public int getSendBufferSize() throws SocketException
SO_SNDBUF для этого Socket, то есть размер буфера, используемого платформой для вывода через этот Socket.- Возвращает:
- значение параметра
SO_SNDBUFдля этогоSocket. - Исключения:
-
SocketException— если возникает ошибка в базовом протоколе, например ошибка TCP, или если сокет закрыт. - С версии:
- 1.2
- См. также:
setReceiveBufferSize
public void setReceiveBufferSize(int size) throws SocketException
Socket значение параметра SO_RCVBUF. Параметр SO_RCVBUF используется сетевым кодом платформы как подсказка о размере базовых буферов сетевого ввода-вывода. Увеличение размера буфера приема может повысить производительность сетевого ввода-вывода при большом объеме соединений, а его уменьшение может помочь сократить очередь входящих данных.
Поскольку SO_RCVBUF является подсказкой, приложениям, которым нужно проверить фактический размер буферов, следует вызвать getReceiveBufferSize().
Значение SO_RCVBUF также используется для задания TCP-окна приема, которое объявляется удаленному узлу. Как правило, размер окна можно изменять в любое время после установления соединения сокета. Однако, если требуется окно приема размером более 64 КБ, запрос необходимо выполнить до установления соединения сокета с удаленным узлом. Следует учитывать два случая:
- Для сокетов, принятых от 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— следует ли включить для сокета проверку активности соединения. - Исключения:
-
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.
Примечания:
Для Internet Protocol версии 4 значение состоит из integer; младшие 8 бит представляют значение октета TOS в IP-пакетах, отправляемых сокетом. RFC 1349 определяет следующие значения TOS:
IPTOS_LOWCOST (0x02)IPTOS_RELIABILITY (0x04)IPTOS_THROUGHPUT (0x08)IPTOS_LOWDELAY (0x10)
Установка битов в поле приоритета может привести к SocketException с указанием, что операция не разрешена.
Как указано в разделе 4.2.4.2 RFC 1122, совместимая реализация TCP должна, но не обязана, позволять приложению изменять поле TOS в течение времени существования соединения. Поэтому возможность изменения поля типа обслуживания после установления TCP-соединения зависит от реализации базовой платформы. Приложениям не следует предполагать, что поле TOS можно изменить после установления соединения.
Для Internet Protocol версии 6 tc — это значение, которое помещается в поле sin6_flowinfo заголовка IP.
- Параметры:
-
tc— значениеintдля набора битов. - Исключения:
-
SocketException— если при установке класса трафика или типа обслуживания возникает ошибка либо если сокет закрыт. - С версии:
- 1.4
- См. также:
getTrafficClass
public int getTrafficClass() throws SocketException
Поскольку базовая реализация сети может игнорировать класс трафика или тип обслуживания, заданные с помощью setTrafficClass(int), этот метод может вернуть значение, отличное от ранее заданного методом setTrafficClass(int) для этого Socket.
- Возвращает:
- ранее заданный класс трафика или тип обслуживания
- Исключения:
-
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.- Возвращает:
- значение
boolean, указывающее, включен ли параметр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
isConnected
public boolean isConnected()
Примечание: закрытие сокета не сбрасывает его состояние соединения. Поэтому для закрытого сокета (см. isClosed()) этот метод вернет true, если сокет был успешно подключен до закрытия.
- Возвращает:
- true, если сокет успешно подключен к серверу
- С версии:
- 1.4
isBound
public boolean isBound()
Примечание: закрытие сокета не сбрасывает его состояние привязки. Поэтому для закрытого сокета (см. isClosed()) этот метод вернет true, если сокет был успешно привязан до закрытия.
- Возвращает:
- 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 и используя защищенный конструктор, принимающий в качестве параметра реализацию.При создании приложением нового клиентского сокета вызывается метод createSocketImpl фабрики реализации сокетов для создания фактической реализации сокета.
Передача null этому методу не приводит к действиям, если фабрика уже не была задана.
- Параметры:
-
fac— требуемая фабрика. - Исключения:
-
IOException— если при задании фабрики сокетов возникает ошибка ввода-вывода. -
SocketException— если фабрика уже определена. - См. также:
setPerformancePreferences
public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
По умолчанию сокеты используют протокол TCP/IP. Некоторые реализации могут предоставлять альтернативные протоколы с характеристиками производительности, отличными от TCP/IP. Этот метод позволяет приложению указать свои предпочтения относительно компромиссов, которые следует учитывать при выборе реализации из доступных протоколов.
Параметры производительности задаются тремя целыми числами, значения которых указывают относительную важность короткого времени установления соединения, низкой задержки и высокой пропускной способности. Абсолютные значения чисел не имеют значения; при выборе протокола значения просто сравниваются, причем большее значение указывает на более высокое предпочтение. Отрицательные значения означают более низкий приоритет, чем положительные. Например, если приложение предпочитает короткое время установления соединения низкой задержке и высокой пропускной способности, оно может вызвать этот метод со значениями (1, 0, 0). Если приложение предпочитает высокую пропускную способность низкой задержке, а низкую задержку — короткому времени установления соединения, оно может вызвать этот метод со значениями (0, 1, 2).
Вызов этого метода после подключения сокета не повлияет на его работу.
- Параметры:
-
connectionTime—int, выражающее относительную важность короткого времени установления соединения -
latency—int, выражающее относительную важность низкой задержки -
bandwidth—int, выражающее относительную важность высокой пропускной способности - С версии:
- 1.5
setOption
public <T> Socket setOption(SocketOption<T> name, T value) throws IOException
- Параметры типа:
T— тип значения параметра сокета- Параметры:
-
name— параметр сокета -
value— значение параметра сокета. Для некоторых параметров допустимо значениеnull. - Возвращает:
- этот Socket
- Исключения:
-
UnsupportedOperationException— если сокет не поддерживает этот параметр. -
IllegalArgumentException— если значение недопустимо для этого параметра. -
IOException— если возникает ошибка ввода-вывода или сокет закрыт. -
NullPointerException— если имя равноnull - С версии:
- 9
getOption
public <T> T getOption(SocketOption<T> name) throws IOException
- Параметры типа:
T— тип значения параметра сокета- Параметры:
-
name— параметр сокета - Возвращает:
- значение параметра сокета.
- Исключения:
-
UnsupportedOperationException— если сокет не поддерживает этот параметр. -
IOException— если возникает ошибка ввода-вывода или сокет закрыт. -
NullPointerException— если имя равноnull - С версии:
- 9
supportedOptions
public Set<SocketOption<?>> supportedOptions()
- Возвращает:
- Набор параметров сокета, поддерживаемых этим сокетом. Этот набор может быть пустым, если не удается создать SocketImpl сокета.
- С версии:
- 9
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/net/Socket.html
streamв ранних выпусках JDK позволял создаватьSocket, использующий дейтаграммный сокет.