Класс 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.
Каналы этого типа безопасны для использования несколькими одновременными потоками, хотя одновременно может быть только одна операция accept. Если поток инициирует операцию accept до завершения предыдущей операции accept, будет выброшено исключение 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.Channel
isOpen Методы, объявленные в интерфейсе java.nio.channels.NetworkChannel
getOption, supportedOptions Конструкторы
AsynchronousServerSocketChannel
protected AsynchronousServerSocketChannel(AsynchronousChannelProvider provider)
Инициализирует новый экземпляр этого класса.
- Параметры:
-
provider- Поставщик, который создал этот канал
Методы
provider
public final AsynchronousChannelProvider provider()
Возвращает поставщика, который создал этот канал.
- Возвращает:
- Поставщик, который создал этот канал
open
public static AsynchronousServerSocketChannel open(AsynchronousChannelGroup group)
throws IOException Открывает асинхронный канал серверного сокета.
Новый канал создается вызовом метода openAsynchronousServerSocketChannel объекта AsynchronousChannelProvider, который создал заданную группу. Если параметр group равен 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 Возвращает адрес сокета, к которому привязан сокет этого канала.
Если канал привязан к адресу сокета интернет-протокола, то возвращаемое значение этого метода имеет тип 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/channels/AsynchronousServerSocketChannel.html