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