Класс AsynchronousServerSocketChannel
- java.lang.Object
-
- java.nio.channels.AsynchronousServerSocketChannel
- Все реализованные интерфейсы:
- Closeable, AutoCloseable, AsynchronousChannel, Channel, NetworkChannel
public abstract class AsynchronousServerSocketChannel extends Object implements AsynchronousChannel, NetworkChannel
Асинхронный канал для потоковых сокетов прослушивания.
Асинхронный серверный сокет-канал создаётся путём вызова метода open этого класса. Новый асинхронный серверный сокет-канал открыт, но ещё не привязан. Он может быть привязан к локальному адресу и настроен на прослушивание подключений путём вызова метода bind. После привязки метод accept используется для инициирования процесса принятия подключений к сокету канала. Попытка вызвать метод accept на несвязанном канале приведёт к исключению NotYetBoundException.
Каналы этого типа безопасны для использования в нескольких потоках, хотя одновременно может быть не более одного запроса на принятие подключения. Если поток инициирует операцию принятия подключения до завершения предыдущей операции принятия подключения, будет брошено исключение AcceptPendingException.
Параметры сокета настраиваются с помощью метода setOption. Каналы этого типа поддерживают следующие параметры:
| Название параметра | Описание |
|---|---|
SO_RCVBUF | Размер буфера приема сокета |
SO_REUSEADDR | Повторное использование адреса |
Пример использования:
final AsynchronousServerSocketChannel listener =
AsynchronousServerSocketChannel.open().bind(new InetSocketAddress(5000));
listener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() {
public void completed(AsynchronousSocketChannel ch, Void att) {
// accept the next connection
listener.accept(null, this);
// handle this connection
handle(ch);
}
public void failed(Throwable exc, Void att) {
...
}
});
- С тех пор как:
- 1.7
Конструкторы
| Модификатор | Конструктор и описание |
|---|---|
protected |
AsynchronousServerSocketChannel(AsynchronousChannelProvider provider) Инициализирует новый экземпляр этого класса. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
abstract Future<AsynchronousSocketChannel> |
accept() Принимает подключение. |
abstract <A> void |
accept(A attachment,
CompletionHandler<AsynchronousSocketChannel,? super A> handler) Принимает подключение. |
AsynchronousServerSocketChannel |
bind(SocketAddress local) Привязывает сокет канала к локальному адресу и настраивает сокет для прослушивания подключений. |
abstract AsynchronousServerSocketChannel |
bind(SocketAddress local,
int backlog) Привязывает сокет канала к локальному адресу и настраивает сокет для прослушивания подключений. |
abstract SocketAddress |
getLocalAddress() Возвращает адрес сокета, к которому привязан сокет этого канала. |
static AsynchronousServerSocketChannel |
open() Открывает асинхронный серверный сокет-канал. |
static AsynchronousServerSocketChannel |
open(AsynchronousChannelGroup group) Открывает асинхронный серверный сокет-канал. |
AsynchronousChannelProvider |
provider() Возвращает провайдера, который создал этот канал. |
abstract <T> AsynchronousServerSocketChannel |
setOption(SocketOption<T> name,
T value) Устанавливает значение параметра сокета. |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы, унаследованные от интерфейса java.nio.channels.AsynchronousChannel
close Методы, унаследованные от интерфейса java.nio.channels.NetworkChannel
getOption, supportedOptions Методы, унаследованные от интерфейса java.nio.channels.Channel
isOpen Конструкторы
AsynchronousServerSocketChannel
protected AsynchronousServerSocketChannel(AsynchronousChannelProvider provider)
Инициализирует новый экземпляр этого класса.
- Параметры:
-
provider- Предоставщик, который создал этот канал
Методы
provider
public final AsynchronousChannelProvider provider()
Возвращает предоставителя, который создал этот канал.
- Возвращает:
- Предоставщик, который создал этот канал
open
public static AsynchronousServerSocketChannel open(AsynchronousChannelGroup group)
throws IOException Открывает асинхронный серверный сокет-канал.
Новый канал создаётся путём вызова метода openAsynchronousServerSocketChannel у объекта AsynchronousChannelProvider, который создал заданную группу. Если параметр группы равен null , то результирующий канал создаётся системным предоставителем по умолчанию и привязывается к группе по умолчанию.
- Параметры:
-
group- Группа, к которой должен быть привязан вновь созданный канал, илиnullдля группы по умолчанию - Возвращает:
- Новый асинхронный серверный сокет-канал
- Исключения:
-
ShutdownChannelGroupException- Если группа каналов закрыта -
IOException- Если произошла ошибка ввода-вывода
open
public static AsynchronousServerSocketChannel open()
throws IOException Открывает асинхронный серверный сокет-канал.
Этот метод возвращает асинхронный серверный сокет-канал, привязанный к группе по умолчанию. Этот метод эквивалентен вычислению выражения:
open((AsynchronousChannelGroup)null);
- Возвращает:
- Новый асинхронный серверный сокет-канал
- Исключения:
-
IOException- Если произошла ошибка ввода-вывода
bind
public final AsynchronousServerSocketChannel bind(SocketAddress local)
throws IOException Привязывает сокет канала к локальному адресу и настраивает сокет на прослушивание подключений.
Вызов этого метода эквивалентен следующему:
bind(local, 0);
- Указано в:
-
bindв интерфейсеNetworkChannel - Параметры:
-
local- Локальный адрес для привязки сокета, илиnullдля привязки к автоматически назначенному адресу сокета - Возвращает:
- Этот канал
- Исключения:
-
AlreadyBoundException- Если сокет уже привязан -
UnsupportedAddressTypeException- Если тип указанного адреса не поддерживается -
SecurityException- Если установлен менеджер безопасности и он отклоняет неопределённое разрешение. Реализация этого интерфейса должна указать все необходимые разрешения. -
ClosedChannelException- Если канал закрыт -
IOException- Если произошла другая ошибка ввода-вывода - См. также:
NetworkChannel.getLocalAddress()
bind
public abstract AsynchronousServerSocketChannel bind(SocketAddress local,
int backlog)
throws IOException Привязывает сокет канала к локальному адресу и настраивает сокет на прослушивание подключений.
Этот метод используется для установления связи между сокетом и локальным адресом. После установления связи сокет остаётся привязанным до тех пор, пока связанный канал не будет закрыт.
Параметр backlog — максимальное количество ожидающих подключений к сокету. Его точное значение зависит от реализации. В частности, реализация может установить максимальную длину или проигнорировать параметр. Если параметр backlog имеет значение 0, или отрицательное значение, используется значение по умолчанию, специфичное для реализации.
- Параметры:
-
local- Локальный адрес для привязки сокета, илиnullдля привязки к автоматически назначенному адресу сокета -
backlog- Максимальное количество ожидающих подключений - Возвращает:
- Этот канал
- Исключения:
-
AlreadyBoundException- Если сокет уже привязан -
UnsupportedAddressTypeException- Если тип указанного адреса не поддерживается -
SecurityException- Если установлен менеджер безопасности и его методcheckListenотклоняет операцию -
ClosedChannelException- Если канал закрыт -
IOException- Если произошла другая ошибка ввода-вывода
setOption
public abstract <T> AsynchronousServerSocketChannel setOption(SocketOption<T> name,
T value)
throws IOException Описание скопировано из интерфейса: NetworkChannel
Устанавливает значение параметра сокета.
- Указано в:
-
setOptionв интерфейсеNetworkChannel - Параметры типа:
-
T- Тип значения параметра сокета - Параметры:
-
name- Параметр сокета -
value- Значение параметра сокета. Значениеnullможет быть допустимым значением для некоторых параметров сокета. - Возвращает:
- Этот канал
- Исключения:
-
IllegalArgumentException- Если значение не является допустимым значением для данного параметра сокета -
ClosedChannelException- Если этот канал закрыт -
IOException- Если произошла ошибка ввода-вывода - См. также:
StandardSocketOptions
accept
public abstract <A> void accept(A attachment,
CompletionHandler<AsynchronousSocketChannel,? super A> handler) Принимает подключение.
Этот метод инициирует асинхронную операцию принятия подключения, установленного к сокету этого канала. Параметр handler — обработчик завершения, который вызывается при успешном принятии подключения (или при ошибке). Результат, переданный обработчику, — AsynchronousSocketChannel нового подключения.
При успешном принятии нового подключения результирующий AsynchronousSocketChannel будет привязан к той же AsynchronousChannelGroup, что и этот канал. Если группа shutdown и подключение принято, то подключение закрывается, и операция завершается с IOException и причиной ShutdownChannelGroupException.
Для возможности одновременного обработки новых подключений, обработчик завершения не вызывается непосредственно инициализирующей нитью, когда новое подключение принято сразу (см. Потоки).
Если установлен менеджер безопасности, он проверяет, разрешает ли менеджер безопасности адрес и номер порта удалённого узла подключения через метод checkAccept менеджера безопасности. Проверка разрешений выполняется с привилегиями, ограниченными контекстом вызова этого метода. Если проверка разрешений не пройдена, то подключение закрывается, и операция завершается с SecurityException.
- Параметры типа:
-
A- Тип прикрепления - Параметры:
-
attachment- Объект для прикрепления к операции ввода-вывода; может бытьnull -
handler- Обработчик для обработки результата - Исключения:
-
AcceptPendingException- Если на этом канале уже происходит операция accept -
NotYetBoundException- Если сокет этого канала ещё не привязан -
ShutdownChannelGroupException- Если группа каналов закрыта
accept
public abstract Future<AsynchronousSocketChannel> accept()
Принимает подключение.
Этот метод инициирует асинхронную операцию принятия подключения, установленного к сокету этого канала. Метод работает точно так же, как метод accept(Object, CompletionHandler), за исключением того, что вместо указания обработчика завершения этот метод возвращает Future , представляющий ожидаемый результат. Метод get объекта Future возвращает AsynchronousSocketChannel нового подключения при успешном выполнении.
- Возвращает:
- объект
Future, представляющий ожидаемый результат - Исключения:
-
AcceptPendingException- Если на этом канале уже происходит операция accept -
NotYetBoundException- Если сокет этого канала ещё не привязан
getLocalAddress
public abstract SocketAddress getLocalAddress()
throws IOException Возвращает адрес сокета, к которому привязан сокет этого канала.
Если канал bound привязан к адресу сокета Интернет-протокола, то значение, возвращаемое этим методом, имеет тип InetSocketAddress.
Если установлен менеджер безопасности, его метод checkConnect вызывается с локальным адресом и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается SocketAddress , представляющий loopback адрес и локальный порт сокета канала.
- Указано в:
-
getLocalAddressв интерфейсеNetworkChannel - Возвращает:
SocketAddress, к которому привязан сокет, или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.