Класс 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
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register Методы, унаследованные от класса java.nio.channels.SelectableChannel
register Методы, унаследованные от класса java.nio.channels.spi.AbstractInterruptibleChannel
begin, close, end, isOpen Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы, унаследованные от интерфейса java.nio.channels.NetworkChannel
getOption, supportedOptions Методы, унаследованные от интерфейса java.nio.channels.Channel
close, isOpen Конструкторы
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к которому привязан сокет, или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.