Класс 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() |
Возвращает true, если чтение из сокета было остановлено. |
boolean |
isOutputShutdown() |
Возвращает true, если запись в сокет была остановлена. |
void |
sendUrgentData |
Отправляет один байт срочных данных через сокет. |
void |
setKeepAlive |
Включает или отключает параметр SO_KEEPALIVE. |
void |
setOOBInline |
Включает или отключает параметр SO_OOBINLINE (приём срочных данных TCP). По умолчанию этот параметр отключён, и полученные через сокет срочные данные TCP молча отбрасываются. |
<T> Socket |
setOption |
Устанавливает значение параметра сокета. |
void |
setPerformancePreferences |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Этот метод предназначался для поддержки протоколов, которые теперь устарели. |
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 |
supportedOptions() |
Возвращает набор параметров сокета, поддерживаемых этим сокетом. |
String |
toString() |
Преобразует этот сокет в String. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Показывает, равен ли какой-либо другой объект этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
Подробное описание конструкторов
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, который подкласс намерен использовать для сокета. - Исключения:
-
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; при этом статус прерывания потока будет установлен.
- Примечание к API:
- Установка TCP/IP-соединения зависит от настроек времени ожидания подключения в операционной системе. Типичное время ожидания операционной системы составляет от нескольких десятков секунд до нескольких минут. Если время ожидания операционной системы истекает раньше, чем указанное для этого метода значение
timeout, выбрасываетсяIOException. Указанное для этого метода значениеtimeoutобычно меньше времени ожидания операционной системы. - Параметры:
-
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
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, объявляемого удаленному узлу. Как правило, размер окна можно менять в любое время после установления соединения через сокет. Однако если требуется окно приема размером более 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.
- Вызывает исключения:
-
IOException— если при завершении работы с этим сокетом произошла ошибка ввода-вывода, сокет не подключен, отправка данных уже завершена или сокет закрыт. - Начиная с:
- 1.3
- См. также:
toString
isConnected
public boolean isConnected()
Закрытие сокета не сбрасывает его состояние подключения. Это означает, что данный метод вернет true для закрытого сокета, если до закрытия он был успешно подключен.
- Возвращает:
- true, если сокет был успешно подключен к серверу
- Начиная с:
- 1.4
isBound
public boolean isBound()
Закрытие сокета не сбрасывает его состояние привязки. Это означает, что данный метод вернет true для закрытого сокета, если до закрытия он был успешно привязан.
- Возвращает:
- true, если сокет был успешно привязан к адресу
- Начиная с:
- 1.4
- См. также:
isClosed
public boolean isClosed()
- Возвращает:
- true, если сокет был закрыт
- Начиная с:
- 1.4
- См. также:
isInputShutdown
public boolean isInputShutdown()
true, если прием данных через сокет был завершен.- Возвращает:
- true, только если предыдущий вызов
shutdownInput()завершился успешно; в противном случае — false - Начиная с:
- 1.4
isOutputShutdown
public boolean isOutputShutdown()
true, если отправка данных через сокет была завершена.- Возвращает:
- true, только если предыдущий вызов
shutdownOutput()завершился успешно; в противном случае — false - Начиная с:
- 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
@Deprecated(since="26", forRemoval=true) 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.
streamв ранних выпусках JDK предоставлял возможность создатьSocket, использующий дейтаграммный сокет.