Класс ServerSocketChannel
- Все реализованные интерфейсы:
-
Closeable,AutoCloseable,Channel,InterruptibleChannel,NetworkChannel
public abstract class ServerSocketChannel extends AbstractSelectableChannel implements NetworkChannel
Серверный сокет-канал создается путём вызова одного из методов open этого класса. Метод open без аргументов открывает серверный сокет-канал для сокета протокола Интернета. Метод open(ProtocolFamily) используется для открытия серверного сокета-канала для сокета указанной семейства протоколов. Невозможно создать канал для произвольного, предварительно существующего сокета. Недавно созданный серверный сокет-канал открыт, но ещё не привязан. Попытка вызвать метод accept не привязанного серверного сокета-канала приведёт к выбрасыванию исключения NotYetBoundException. Серверный сокет-канал можно привязать, вызвав один из методов bind, определённых в этом классе.
Параметры сокета настраиваются с помощью метода setOption. Серверные сокет-каналы для сокетов протокола Интернета поддерживают следующие параметры:
Имя параметра Описание SO_RCVBUFРазмер буфера приема сокета SO_REUSEADDRИспользование адреса
Серверные сокет-каналы для сокетов домен Unix поддерживают:
Имя параметра Описание SO_RCVBUFРазмер буфера приема сокета
Возможно также поддержка дополнительных (специфичных для реализации) параметров.
Серверные сокет-каналы безопасны для использования несколькими параллельными потоками.
- С момента:
- 1.4
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract SocketChannel |
accept() |
Принимает подключение, выполненное к сокету этого канала. |
final ServerSocketChannel |
bind |
Привязывает сокет канала к локальному адресу и настраивает сокет для прослушивания подключений. |
abstract ServerSocketChannel |
bind |
Привязывает сокет канала к локальному адресу и настраивает сокет для прослушивания подключений. |
abstract SocketAddress |
getLocalAddress() |
Возвращает адрес сокета, к которому привязан сокет этого канала. |
static ServerSocketChannel |
open() |
Открывает серверный сокет-канал для сокета протокола Интернета. |
static ServerSocketChannel |
open |
Открывает серверный сокет-канал. |
abstract <T> ServerSocketChannel |
setOption |
Устанавливает значение параметра сокета. |
abstract ServerSocket |
socket() |
Возвращает серверный сокет, связанный с этим каналом. |
final 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
Подробное описание конструкторов
ServerSocketChannel
protected ServerSocketChannel(SelectorProvider provider)
- Параметры:
-
provider- Провайдер, который создал этот канал
Подробное описание методов
open
public static ServerSocketChannel open() throws IOException
Новый канал создается вызовом метода openServerSocketChannel системного провайдера SelectorProvider.
Сокет нового канала изначально не привязан; его необходимо привязать к конкретному адресу с помощью одного из методов сокета bind, прежде чем можно будет принимать подключения.
- Возвращает:
- Новый канал сокета
- Исключения:
-
IOException- Если произошла ошибка ввода-вывода - См. также:
open
public static ServerSocketChannel open(ProtocolFamily family) throws IOException
family определяет protocol family сокета канала. Новый канал создается вызовом метода openServerSocketChannel(ProtocolFamily) системного провайдера SelectorProvider.
- Параметры:
-
family- Семейство протоколов - Возвращает:
- Новый канал сокета
- Исключения:
-
UnsupportedOperationException- Если указанное семейство протоколов не поддерживается. Например, если параметр задан какStandardProtocolFamily.INET6, но IPv6 не включен на платформе. -
IOException- Если произошла ошибка ввода-вывода - С:
- 15
- См. также:
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- Если установлен менеджер безопасности и он запрещает операцию - С:
- 1.7
- См. также:
bind
public abstract ServerSocketChannel bind(SocketAddress local, int backlog) throws IOException
Этот метод используется для установления связи между сокетом и локальным адресом. Для сокетов протокола Интернет, после установления связи сокет остается привязанным до закрытия канала.
Параметр backlog - максимальное количество ожидающих подключений к сокету. Его точное значение зависит от реализации. В частности, реализация может установить максимальную длину или игнорировать параметр полностью. Если параметр backlog имеет значение 0, или отрицательное значение, используется значение по умолчанию, зависящее от реализации.
- Примечание API:
- Привязка канала серверного сокета для сокета Unix Domain создает файл, соответствующий пути к файлу в
UnixDomainSocketAddress. Этот файл сохраняется после закрытия канала и должен быть удален, прежде чем другой сокет сможет привязаться к тому же имени. Привязка к адресуnullприводит к тому, что сокет автоматически привязывается к уникальному временному файлу в системе. Сопутствующий файл сокета также сохраняется после закрытия канала. Его имя можно получить из локального адреса сокета канала. - Примечание реализации:
- Каждая платформа применяет максимальную длину имени сокета Unix Domain, зависящую от реализации. Это ограничение применяется при привязке канала. Максимальная длина обычно близка к 100 байтам и не меньше. Это ограничение также применяется к каналам серверных сокетов с автоматической привязкой. См. свойства Unix domain сети, которые могут быть использованы для выбора временной директории, в которой создаются эти сокеты.
- Параметры:
-
local- Адрес для привязки сокета, илиnullдля привязки к автоматически назначенному адресу сокета -
backlog- Максимальное количество ожидающих подключений - Возвращает:
- Этот канал
- Исключения:
-
AlreadyBoundException- Если сокет уже привязан -
UnsupportedAddressTypeException- Если тип заданного адреса не поддерживается -
ClosedChannelException- Если этот канал закрыт -
IOException- Если произошла другая ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности и его методcheckListenзапрещает операцию для адреса сокета протокола Интернета или для адреса сокета Unix domain, если он запрещаетNetPermission("accessUnixDomainSocket"). - С:
- 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
- См. также:
socket
public abstract ServerSocket socket()
Возвращаемый объект не будет объявлять никаких публичных методов, которые не объявлены в классе ServerSocket.
- Возвращает:
- Серверный сокет, связанный с этим каналом
- Исключения:
-
UnsupportedOperationException- Если сокет канала не является сокетом протокола Интернет
accept
public abstract SocketChannel accept() throws IOException
Если этот канал находится в режиме без ожидания, то этот метод немедленно вернёт null если нет ожидающих подключений. В противном случае он будет блокироваться неопределённо долго, пока новое подключение не станет доступным или не произойдёт ошибка ввода-вывода.
Канал сокета, возвращаемый этим методом, если таковой имеется, будет находиться в режиме блокировки независимо от режима блокировки этого канала.
Если связан с адресом сокета протокола Интернета, этот метод выполняет точно такие же проверки безопасности, как метод accept класса ServerSocket. То есть, если установлено управление безопасностью, то для каждого нового подключения этот метод проверяет, разрешены ли адрес и номер порта удалённого конца подключения посредством метода checkAccept управления безопасностью. Если связан с адресом сокета домен Unix, этот метод проверяет NetPermission("accessUnixDomainSocket").
- Возвращает:
- Канал сокета для нового подключения или
nullесли этот канал находится в режиме без ожидания и нет доступного подключения для приема - Выбрасывает:
-
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал во время выполнения операции accept -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции accept, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
NotYetBoundException- Если сокет этого канала ещё не связан -
SecurityException- Если установлено управление безопасностью и этот канал связан сInetSocketAddress, и управление безопасностью отказывается предоставить доступ к удалённому концу нового подключения, или если этот канал связан сUnixDomainSocketAddressи управление безопасностью отказывается предоставитьNetPermission("accessUnixDomainSocket") -
IOException- Если произошла другая ошибка ввода-вывода
getLocalAddress
public abstract SocketAddress getLocalAddress() throws IOException
Если канал bound к адресу сокета протокола Интернета, то возвращаемое значение из этого метода имеет тип InetSocketAddress. Если установлено управление безопасностью, его метод checkConnect вызывается с локальным адресом и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается SocketAddress, представляющий собой loopback адрес и локальный порт сокета канала.
Если канал привязан к адресу сокета домена Unix, адрес сокета — это UnixDomainSocketAddress. Если установлено управление безопасностью, его метод checkPermission вызывается с NetPermission
("accessUnixDomainSocket"). Если операция не разрешена, возвращается безымянный UnixDomainSocketAddress.
- Определено в:
-
getLocalAddressв интерфейсеNetworkChannel - Возвращает:
- Адрес, к которому привязан сокет, или
SocketAddress, представляющий адрес обратной связи или пустой путь, если доступ запрещён управлением безопасностью, илиnullесли сокет канала не привязан - Выбрасывает:
-
ClosedChannelException- Если канал закрыт -
IOException- Если произошла ошибка ввода-вывода
© 1993, 2023, 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/21/docs/api/java.base/java/nio/channels/ServerSocketChannel.html