Класс Socket
- java.lang.Object
-
- java.net.Socket
- Все реализованные интерфейсы:
- Closeable, AutoCloseable
- Прямые известные подклассы:
- SSLSocket
public class Socket extends Object implements Closeable
Этот класс реализует клиентские сокеты (также называемые просто "сокетами"). Сокет — это конечная точка для связи между двумя машинами.
Фактическая работа сокета выполняется экземпляром класса SocketImpl. Приложение, изменяя фабрику сокетов, которая создает реализацию сокета, может настроить себя на создание сокетов, соответствующих локальному брандмауэру.
- С тех пор:
- JDK1.0
- См. также:
-
setSocketImplFactory(java.net.SocketImplFactory),SocketImpl,SocketChannel
Конструкторы
| Модификатор | Конструктор и описание |
|---|---|
Socket() Создаёт неподключенный сокет с типом SocketImpl по умолчанию для системы. | |
Socket(InetAddress address,
int port) Создаёт сокет потокового типа и подключает его к указанному номеру порта на указанном IP-адресе. | |
Socket(InetAddress host,
int port,
boolean stream) Устарело. Для UDP-транспорта используйте DatagramSocket. | |
Socket(InetAddress address,
int port,
InetAddress localAddr,
int localPort) Создаёт сокет и подключает его к указанному удалённому адресу по указанному удалённому порту. | |
Socket(Proxy proxy) Создаёт неподключенный сокет, указывая тип прокси, если он требуется, независимо от других настроек. | |
protected |
Socket(SocketImpl impl) Создаёт неподключенный сокет с указанным пользователем SocketImpl. |
Socket(String host,
int port) Создаёт сокет потокового типа и подключает его к указанному номеру порта на указанном имени хоста. | |
Socket(String host,
int port,
boolean stream) Устарело. Для UDP-транспорта используйте DatagramSocket. | |
Socket(String host,
int port,
InetAddress localAddr,
int localPort) Создаёт сокет и подключает его к указанному удалённому хосту по указанному удалённому порту. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
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() Проверяет, включён ли |
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) Включает/выключает |
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() Отключает выходной поток для этого сокета. |
String |
toString() Преобразует этот сокет в |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait Конструкторы
Socket
public Socket()
Создаёт неподключённый сокет с типом SocketImpl по умолчанию.
- С момента:
- JDK1.1
Socket
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
Socket
protected Socket(SocketImpl impl)
throws SocketException Создаёт неподключённый сокет с заданным SocketImpl.
- Параметры:
-
impl- экземпляр SocketImpl, который подкласс хочет использовать в сокете. - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. -
SecurityException- еслиimplне null, менеджер безопасности установлен, и его методcheckPermissionне допускаетNetPermission("setSocketImpl"). - С момента:
- JDK1.1
Socket
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)
Socket
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)
Socket
public Socket(String host,
int port,
InetAddress localAddr,
int localPort)
throws IOException Создаёт сокет и подключает его к указанному удалённому хосту по указанному удалённому порту. Сокет также будет привязан к локальному адресу и порту.
Если указанный хост равен null это эквивалентно указанию адреса как InetAddress.getByName(null). Другими словами, это эквивалентно указанию адреса локального интерфейса.
Локальный номер порта zero позволит системе выбрать свободный порт в ходе операции bind.
Если установлен менеджер безопасности, его метод checkConnect вызывается с адресом хоста и port в качестве аргументов. Это может привести к исключению SecurityException.
- Параметры:
-
host- имя удалённого хоста, илиnullдля адреса обратной связи. -
port- удалённый порт -
localAddr- локальный адрес для привязки сокета, илиnullдля адресаanyLocal. -
localPort- локальный порт для привязки сокета, илиzeroдля выбора свободного порта системой. - Исключения:
-
IOException- если при создании сокета произошла ошибка ввода-вывода. -
SecurityException- если менеджер безопасности существует и его методcheckConnectне разрешает подключение к пункту назначения или его методcheckListenне разрешает привязку к локальному порту. -
IllegalArgumentException- если параметр порта или localPort находится вне допустимого диапазона (0-65535). - С момента:
- JDK1.1
- См. также:
SecurityManager.checkConnect(java.lang.String, int)
Socket
public Socket(InetAddress address,
int port,
InetAddress localAddr,
int localPort)
throws IOException Создаёт сокет и подключает его к указанному удалённому адресу по указанному удалённому порту. Сокет также будет привязан к локальному адресу и порту.
Если указанный локальный адрес null это эквивалентно указанию адреса любого локального адреса (см. InetAddress.isAnyLocalAddress()).
Локальный номер порта zero позволит системе выбрать свободный порт в ходе операции bind.
Если установлен менеджер безопасности, его метод checkConnect вызывается с адресом хоста и port в качестве аргументов. Это может привести к исключению SecurityException.
- Параметры:
-
address- удалённый адрес -
port- удалённый порт -
localAddr- локальный адрес для привязки сокета, илиnullдля адресаanyLocal. -
localPort- локальный порт для привязки сокета, илиzeroдля выбора свободного порта системой. - Исключения:
-
IOException- если при создании сокета произошла ошибка ввода-вывода. -
SecurityException- если менеджер безопасности существует и его методcheckConnectне разрешает подключение к пункту назначения или его методcheckListenне разрешает привязку к локальному порту. -
IllegalArgumentException- если параметр порта или localPort находится вне допустимого диапазона (0-65535). -
NullPointerException- еслиaddressравно null. - С момента:
- JDK1.1
- См. также:
SecurityManager.checkConnect(java.lang.String, int)
Socket
@Deprecated
public Socket(String host,
int port,
boolean stream)
throws IOException Устарело. Используйте DatagramSocket для UDP-транспорта.
Создаёт потоковый сокет и подключает его к указанному порту на указанном хосте.
Если указанный хост равен 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 Устарело. Используйте DatagramSocket вместо UDP-транспорта.
Создаёт сокет и подключает его к указанному номеру порта на указанном IP-адресе.
Если параметр stream имеет значение true, создаётся сокет потока. Если параметр stream имеет значение false, создаётся сокет дейтаграммы.
Если приложение указало фабрику сокетов, вызывается метод createSocketImpl фабрики для создания фактической реализации сокета. В противном случае создаётся "простой" сокет.
Если существует менеджер безопасности, вызывается его метод checkConnect с host.getHostAddress() и port в качестве аргументов. Это может привести к исключению SecurityException.
Если используется сокет UDP, параметры сокета, относящиеся к TCP/IP, не будут применяться.
- Параметры:
-
host- IP-адрес. -
port- номер порта. -
stream- еслиtrue, создать сокет потока; в противном случае, создать сокет дейтаграммы. - Исключения:
-
IOException- если при создании сокета произошла ошибка ввода-вывода. -
SecurityException- если существует менеджер безопасности и его методcheckConnectне разрешает операцию. -
IllegalArgumentException- если параметр порта находится за пределами допустимого диапазона портов, который составляет от 0 до 65535 включительно. -
NullPointerException- еслиhostравно null. - См. также:
-
setSocketImplFactory(java.net.SocketImplFactory),SocketImpl,SocketImplFactory.createSocketImpl(),SecurityManager.checkConnect(java.lang.String, int)
Методы
connect
public void connect(SocketAddress endpoint)
throws IOException Подключает этот сокет к серверу.
- Параметры:
-
endpoint- адрес - Исключения:
-
IOException- если произошла ошибка во время подключения -
IllegalBlockingModeException- если у этого сокета есть связанный канал, и канал находится в режиме без блокировки -
IllegalArgumentException- если конечная точка равна null или является подклассом SocketAddress, не поддерживаемым этим сокетом - С момента:
- 1.4
connect
public void connect(SocketAddress endpoint,
int timeout)
throws IOException Подключает этот сокет к серверу с указанным временем ожидания. Время ожидания 0 интерпретируется как бесконечное время ожидания. Подключение будет блокироваться до установления соединения или возникновения ошибки.
- Параметры:
-
endpoint- адрес -
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.
- Возвращает:
- локальный адрес, к которому привязан сокет, адрес обратной связи, если доступ запрещён менеджером безопасности, или адрес по умолчанию, если сокет закрыт или ещё не привязан.
- С момента:
- JDK1.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-ошибка. - С:
- JDK1.1
- См. также:
getTcpNoDelay()
getTcpNoDelay
public boolean getTcpNoDelay()
throws SocketException Проверяет, включен ли TCP_NODELAY.
- Возвращает:
- значение, указывающее, включён ли
TCP_NODELAY. - Исключение:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. - С:
- JDK1.1
- См. также:
setTcpNoDelay(boolean)
setSoLinger
public void setSoLinger(boolean on,
int linger)
throws SocketException Включить/отключить SO_LINGER с указанным временем ожидания в секундах. Максимальное значение таймаута зависит от платформы. Настройка влияет только на закрытие сокета.
- Параметры:
-
on- включить ожидание ли нет. -
linger- время ожидания, если on равно true. - Исключение:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. -
IllegalArgumentException- если значение ожидания отрицательное. - С:
- JDK1.1
- См. также:
getSoLinger()
getSoLinger
public int getSoLinger()
throws SocketException Возвращает значение настройки SO_LINGER. -1 означает, что опция отключена. Настройка влияет только на закрытие сокета.
- Возвращает:
- значение настройки
SO_LINGER. - Исключение:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. - С:
- JDK1.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.
- Возвращает:
- значение, указывающее, включена ли опция
SO_OOBINLINE. - Исключение:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. - С:
- 1.4
- См. также:
setOOBInline(boolean)
setSoTimeout
public void setSoTimeout(int timeout)
throws SocketException Включить/отключить SO_TIMEOUT с указанным таймаутом в миллисекундах. Если эта опция установлена с ненулевым таймаутом, вызов read() на InputStream, связанном с этим Socket, будет блокироваться только в течение этого времени. Если таймаут истечёт, будет вызвано исключение java.net.SocketTimeoutException, хотя сокет останется валидным. Опция должна быть включена перед входом в блокирующую операцию, чтобы иметь эффект. Таймаут должен быть > 0. Таймаут нулевой интерпретируется как бесконечный таймаут.
- Параметры:
-
timeout- указанный таймаут в миллисекундах. - Исключение:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. - С:
- JDK 1.1
- См. также:
getSoTimeout()
getSoTimeout
public int getSoTimeout()
throws SocketException Возвращает значение настройки SO_TIMEOUT. 0 означает, что опция отключена (т. е. таймаут бесконечен).
- Возвращает:
- значение настройки
SO_TIMEOUT - Исключение:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. - С:
- JDK1.1
- См. также:
setSoTimeout(int)
setSendBufferSize
public void setSendBufferSize(int size)
throws SocketException Устанавливает опцию SO_SNDBUF для этого сокета на указанное значение. Опция SO_SNDBUF используется сетевым кодом платформы в качестве подсказки для размера буферов сетевого ввода-вывода.
Так как SO_SNDBUF является подсказкой, приложения, которые хотят проверить, какой размер буферов был установлен, должны вызвать getSendBufferSize().
- Параметры:
-
size- размер, на который необходимо установить размер буфера отправки. Это значение должно быть больше 0. - Исключение:
-
SocketException- если произошла ошибка в базовом протоколе, например, TCP-ошибка. -
IllegalArgumentException- если значение равно 0 или отрицательно. - С:
- 1.2
- См. также:
getSendBufferSize()
getSendBufferSize
public int getSendBufferSize()
throws SocketException Получение значения опции SO_SNDBUF для этого сокета, то есть размер буфера, используемый платформой для вывода в этот сокет.
- Возвращает:
- значение опции
SO_SNDBUFдля этого сокета. - Исключение:
-
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.
- Возвращает:
- значение, указывающее, включена ли опция
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) позволяет привязать сокет, даже если предыдущее соединение находится в состоянии тайм-аута.
При создании сокета начальное значение SO_REUSEADDR отключено.
Поведение при включении или отключении SO_REUSEADDR после привязки сокета (см. isBound()) не определено.
- Параметры:
-
on- включить или отключить опцию сокета - Исключения:
-
SocketException- если произошла ошибка при включении или отключении опции сокетаSO_REUSEADDR, или сокет закрыт. - С тех пор:
- 1.4
- См. также:
-
getReuseAddress(),bind(SocketAddress),isClosed(),isBound()
getReuseAddress
public boolean getReuseAddress()
throws SocketException Проверяет, включен ли SO_REUSEADDR.
- Возвращает:
- значение, указывающее, включена ли опция
SO_REUSEADDR. - Исключения:
-
SocketException- если возникла ошибка в базовом протоколе, например, ошибка TCP. - С тех пор:
- 1.4
- См. также:
setReuseAddress(boolean)
close
public void close()
throws IOException Закрывает этот сокет.
Любой поток, заблокированный в операции ввода-вывода с этим сокетом, выбросит SocketException.
После закрытия сокета он недоступен для дальнейшего использования в сети (т.е. его нельзя перезасоединить или перепривязать). Необходимо создать новый сокет.
Закрытие этого сокета также закроет потоки ввода InputStream и вывода OutputStream этого сокета.
Если у этого сокета есть связанный канал, то канал также закрывается.
- Определено в:
-
closeв интерфейсеCloseable - Определено в:
-
closeв интерфейсеAutoCloseable - Исключения:
-
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). Если приложение предпочитает высокую пропускную способность перед низкой задержкой, и низкую задержку перед коротким временем подключения, то оно может вызвать этот метод со значениями (0, 1, 2).
Вызов этого метода после подключения к этому сокету не повлияет.
- Параметры:
-
connectionTime-intвыражает относительную важность короткого времени подключения. -
latency-intвыражает относительную важность низкой задержки. -
bandwidth-intвыражает относительную важность высокой пропускной способности. - С момента:
- 1.5
© 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.