Класс ServerSocketChannel
- java.lang.Object
-
- java.nio.channels.spi.AbstractInterruptibleChannel
-
- java.nio.channels.SelectableChannel
-
- java.nio.channels.spi.AbstractSelectableChannel
-
- java.nio.channels.ServerSocketChannel
- Все реализованные интерфейсы:
-
Closeable,AutoCloseable,Channel,InterruptibleChannel,NetworkChannel
public abstract class ServerSocketChannel extends AbstractSelectableChannel implements NetworkChannel
Выбираемый канал для сокетов прослушивания потокового типа.
Канал серверного сокета создается путем вызова метода open этого класса. Невозможно создать канал для произвольного, существующего ранее ServerSocket. Недавно созданный канал серверного сокета открыт, но еще не привязан. Попытка вызвать метод accept непривязанного канала серверного сокета приведет к возникновению исключения NotYetBoundException. Канал серверного сокета можно привязать, вызвав один из методов bind, определенных в этом классе.
Параметры сокета настраиваются с помощью метода setOption. Каналы серверных сокетов поддерживают следующие параметры:
| Имя параметра | Описание |
|---|---|
SO_RCVBUF | Размер буфера приема сокета |
SO_REUSEADDR | Повторное использование адреса |
Каналы серверных сокетов безопасны для использования несколькими одновременными потоками.
- С:
- 1.4
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | ServerSocketChannel(SelectorProvider provider) | Инициализирует новый экземпляр этого класса. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract SocketChannel | accept() | Принимает соединение, установленное с сокетом этого канала. |
ServerSocketChannel | bind(SocketAddress local) | Привязывает сокет канала к локальному адресу и настраивает сокет для прослушивания подключений. |
abstract ServerSocketChannel | bind(SocketAddress local,
int backlog) | Привязывает сокет канала к локальному адресу и настраивает сокет для прослушивания подключений. |
abstract SocketAddress | getLocalAddress() | Возвращает адрес сокета, к которому привязан сокет этого канала. |
static ServerSocketChannel | open() | Открывает канал серверного сокета. |
abstract <T> ServerSocketChannel | setOption(SocketOption<T> name,
T value) | Устанавливает значение параметра сокета. |
abstract ServerSocket | socket() | Возвращает серверный сокет, связанный с этим каналом. |
int | validOps() | Возвращает набор операций, определяющий поддерживаемые операции этого канала. |
Методы, объявленные в классе java.nio.channels.spi.AbstractSelectableChannel
configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, provider, register Методы, объявленные в классе java.nio.channels.SelectableChannel
blockingLock, isBlocking, isRegistered, keyFor, register Методы, объявленные в классе java.nio.channels.spi.AbstractInterruptibleChannel
begin, close, end Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы, объявленные в интерфейсе java.nio.channels.Channel
isOpen Методы, объявленные в интерфейсе java.nio.channels.NetworkChannel
getOption, supportedOptions Конструкторы
ServerSocketChannel
protected ServerSocketChannel(SelectorProvider provider)
Инициализирует новый экземпляр этого класса.
- Параметры:
-
provider- Предоставление, которое создало этот канал
Методы
open
public static ServerSocketChannel open()
throws IOException Открывает серверный сокет-канал.
Новый канал создаётся путём вызова метода openServerSocketChannel системного объекта по умолчанию SelectorProvider.
Сокет нового канала изначально не привязан; он должен быть привязан к определённому адресу с помощью одного из методов сокета bind, прежде чем можно принимать подключения.
- Возвращает:
- Новый сокет-канал
- Исключения:
-
IOException- Если произошла ошибка ввода-вывода
validOps
public final int validOps()
Возвращает набор операций, определяющий поддерживаемые этим каналом операции.
Серверные сокет-каналы поддерживают только принятие новых подключений, поэтому этот метод возвращает SelectionKey.OP_ACCEPT.
- Определено в:
-
validOpsв классеSelectableChannel - Возвращает:
- Набор допустимых операций
bind
public final ServerSocketChannel bind(SocketAddress local)
throws IOException Привязывает сокет канала к локальному адресу и настраивает сокет для прослушивания подключений.
Вызов этого метода эквивалентен следующему:
bind(local, 0);
- Определено в:
-
bindв интерфейсеNetworkChannel - Параметры:
-
local- Локальный адрес для привязки сокета, илиnullдля привязки к автоматически назначенному адресу сокета - Возвращает:
- Этот канал
- Исключения:
-
AlreadyBoundException- Если сокет уже привязан -
UnsupportedAddressTypeException- Если тип указанного адреса не поддерживается -
ClosedChannelException- Если канал закрыт -
IOException- Если произошла другая ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности, и его методcheckListenотклоняет операцию - С:
- 1.7
- См. также:
NetworkChannel.getLocalAddress()
bind
public abstract ServerSocketChannel bind(SocketAddress local,
int backlog)
throws IOException Привязывает сокет канала к локальному адресу и настраивает сокет для прослушивания подключений.
Этот метод используется для установления связи между сокетом и локальным адресом. После установления связи сокет остаётся привязанным до тех пор, пока канал не будет закрыт.
Параметр backlog представляет собой максимальное число ожидающих подключений к сокету. Его точное значение зависит от реализации. В частности, реализация может установить максимальную длину или полностью проигнорировать параметр. Если параметр backlog имеет значение 0, или отрицательное значение, то используется значение по умолчанию, зависящее от реализации.
- Параметры:
-
local- Адрес для привязки сокета, илиnullдля привязки к автоматически назначенному адресу сокета -
backlog- Максимальное число ожидающих подключений - Возвращает:
- Этот канал
- Исключения:
-
AlreadyBoundException- Если сокет уже привязан -
UnsupportedAddressTypeException- Если тип указанного адреса не поддерживается -
ClosedChannelException- Если этот канал закрыт -
IOException- Если произошла другая ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности, и его методcheckListenотклоняет операцию - С:
- 1.7
setOption
public abstract <T> ServerSocketChannel setOption(SocketOption<T> name,
T value)
throws IOException Описание скопировано из интерфейса: NetworkChannel
Устанавливает значение параметра сокета.
- Определено в:
-
setOptionв интерфейсеNetworkChannel - Параметры типа:
-
T- Тип значения параметра сокета - Параметры:
-
name- Параметр сокета -
value- Значение параметра сокета. Значениеnullможет быть допустимым значением для некоторых параметров сокета. - Возвращает:
- Этот канал
- Исключения:
-
UnsupportedOperationException- Если параметр сокета не поддерживается этим каналом -
IllegalArgumentException- Если значение не является допустимым значением для этого параметра сокета -
ClosedChannelException- Если этот канал закрыт -
IOException- Если произошла ошибка ввода-вывода - С:
- 1.7
- См. также:
StandardSocketOptions
socket
public abstract ServerSocket socket()
Возвращает серверный сокет, связанный с этим каналом.
Возвращаемый объект не будет объявлять никаких общедоступных методов, которые не объявлены в классе ServerSocket.
- Возвращает:
- Серверный сокет, связанный с этим каналом
accept
public abstract SocketChannel accept()
throws IOException Принимает подключение, установленное к сокету этого канала.
Если этот канал находится в режиме без блокировки, этот метод сразу же вернёт null, если нет ожидающих подключений. В противном случае он будет блокироваться неопределённое время, пока не будет доступно новое подключение или не произойдёт ошибка ввода-вывода.
Сокет-канал, возвращаемый этим методом, если таковой имеется, будет находиться в режиме блокировки независимо от режима блокировки этого канала.
Этот метод выполняет точно такие же проверки безопасности, как метод accept класса ServerSocket. То есть, если установлен менеджер безопасности, то для каждого нового подключения этот метод проверяет, разрешены ли адрес и номер порта удалённого конечного узла менеджером безопасности с помощью метода checkAccept.
- Возвращает:
- Сокет-канал нового подключения, или
null, если этот канал находится в режиме без блокировки и нет подключений для принятия - Исключения:
-
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал, пока операция accept находится в процессе выполнения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции accept, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
NotYetBoundException- Если сокет этого канала ещё не привязан -
SecurityException- Если установлен менеджер безопасности, и он не разрешает доступ к удалённому узлу нового подключения -
IOException- Если произошла другая ошибка ввода-вывода
getLocalAddress
public abstract SocketAddress getLocalAddress()
throws IOException Возвращает адрес сокета, к которому привязан сокет этого канала.
Если канал привязан к адресу сокета интернет-протокола, то возвращаемое значение этого метода имеет тип InetSocketAddress.
Если установлен менеджер безопасности, его метод checkConnect вызывается с локальным адресом и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается SocketAddress, представляющий собой адрес loopback и локальный порт сокета канала.
- Определено в:
-
getLocalAddressв интерфейсеNetworkChannel - Возвращает:
- Адрес, к которому привязан сокет, или
SocketAddress, представляющий собой адрес обратной связи, если доступ запрещён менеджером безопасности, илиnull, если сокет канала не привязан - Исключения:
-
ClosedChannelException- Если канал закрыт -
IOException- Если произошла ошибка ввода-вывода
© 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/nio/channels/ServerSocketChannel.html