Класс 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() |
Возвращает набор операций, указывающий операции, поддерживаемые этим каналом. |
Методы, объявленные в классе AbstractSelectableChannel
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register | Модификатор и тип | Метод | Описание |
|---|---|---|
final Object |
blockingLock() |
Возвращает объект, на котором синхронизируются методы configureBlocking и register. |
final SelectableChannel |
configureBlocking |
Изменяет режим блокировки этого канала. |
protected final void |
implCloseChannel() |
Закрывает этот канал. |
protected abstract void |
implCloseSelectableChannel() |
Закрывает этот выбираемый канал. |
protected abstract void |
implConfigureBlocking |
Изменяет режим блокировки этого канала. |
final boolean |
isBlocking() |
Указывает, будет ли каждая операция ввода-вывода в этом канале блокироваться до ее завершения. |
final boolean |
isRegistered() |
Указывает, зарегистрирован ли этот канал в данный момент в каких-либо селекторах. |
final SelectionKey |
keyFor |
Возвращает ключ, представляющий регистрацию канала в указанном селекторе. |
final SelectorProvider |
provider() |
Возвращает поставщика, создавшего этот канал. |
final SelectionKey |
register |
Регистрирует этот канал в указанном селекторе и возвращает ключ выбора. |
Методы, объявленные в классе SelectableChannel
register | Модификатор и тип | Метод | Описание |
|---|---|---|
final SelectionKey |
register |
Регистрирует этот канал в указанном селекторе и возвращает ключ выбора. |
Методы, объявленные в классе AbstractInterruptibleChannel
begin, close, end, isOpen | Модификатор и тип | Метод | Описание |
|---|---|---|
protected final void |
begin() |
Отмечает начало операции ввода-вывода, которая может блокироваться неограниченно долго. |
final void |
close() |
Закрывает этот канал. |
protected final void |
end |
Отмечает завершение операции ввода-вывода, которая может блокироваться неограниченно долго. |
final boolean |
isOpen() |
Указывает, открыт ли этот канал. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект какому-либо другому объекту. |
protected void |
finalize() |
Устарело, подлежит удалению: этот элемент API может быть удален в будущей версии. Финализация устарела и подлежит удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает значение хеш-кода этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова метода notify или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова метода notify или прерывания, либо до истечения заданного времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова метода notify или прерывания, либо до истечения заданного времени. |
Методы, объявленные в интерфейсе NetworkChannel
getOption, supportedOptions | Модификатор и тип | Метод | Описание |
|---|---|---|
<T> T |
getOption |
Возвращает значение параметра сокета. |
Set |
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— Если возникает другая ошибка ввода-вывода - Начиная с:
- 1.7
- См. также:
bind
public abstract ServerSocketChannel bind(SocketAddress local, int backlog) throws IOException
Этот метод используется для установления связи между сокетом и локальным адресом. Для сокетов интернет-протокола после установления связи сокет остается привязанным до закрытия канала.
Параметр backlog задает максимальное количество ожидающих подключений на сокете. Его точная семантика зависит от реализации. В частности, реализация может ограничить максимальную длину очереди или полностью игнорировать этот параметр. Если параметр backlog имеет значение 0 или отрицательное значение, используется значение по умолчанию, зависящее от реализации.
- Примечание API:
- Привязка канала серверного сокета для сокета домена Unix создает файл, соответствующий пути к файлу в
UnixDomainSocketAddress. Этот файл сохраняется после закрытия канала, и его необходимо удалить, прежде чем другой сокет сможет привязаться к тому же имени. Привязка к адресуnullприводит к тому, что сокет автоматически привязывается к уникальному файлу в системном временном каталоге. Соответствующий файл сокета также сохраняется после закрытия канала. Его имя можно получить из локального адреса сокета канала. - Примечание по реализации:
- Каждая платформа устанавливает зависящее от реализации максимальное ограничение длины имени сокета домена Unix. Это ограничение применяется при привязке канала. Максимальная длина обычно близка к 100 байтам и, как правило, не меньше этого значения. Ограничение также применяется к автоматически привязываемым каналам серверных сокетов. См. свойства сетевого взаимодействия домена Unix, с помощью которых можно выбрать временный каталог для создания этих сокетов.
- Параметры:
-
local— Адрес для привязки сокета илиnullдля привязки к автоматически назначенному адресу сокета -
backlog— Максимальное количество ожидающих подключений - Возвращает:
- Этот канал
- Выбрасывает:
-
AlreadyBoundException— Если сокет уже привязан -
UnsupportedAddressTypeException— Если тип указанного адреса не поддерживается -
ClosedChannelException— Если этот канал закрыт -
IOException— Если возникает другая ошибка ввода-вывода - Начиная с:
- 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, если ожидающих подключений нет. В противном случае он будет ждать неограниченно долго, пока не станет доступно новое подключение или не произойдет ошибка ввода-вывода.
Возвращенный этим методом канал сокета, если он есть, будет работать в блокирующем режиме независимо от режима блокировки этого канала.
- Возвращает:
- Канал сокета для нового подключения или
null, если этот канал работает в неблокирующем режиме и нет доступного подключения для приема - Выбрасывает:
-
ClosedChannelException— Если этот канал закрыт -
AsynchronousCloseException— Если другой поток закрывает этот канал во время выполнения операции accept -
ClosedByInterruptException— Если другой поток прерывает текущий поток во время выполнения операции accept, закрывая тем самым канал и устанавливая статус прерывания текущего потока -
NotYetBoundException— Если сокет этого канала еще не привязан -
IOException— Если возникает другая ошибка ввода-вывода
getLocalAddress
public abstract SocketAddress getLocalAddress() throws IOException
Если канал bound к адресу сокета интернет-протокола, значение, возвращаемое этим методом, имеет тип InetSocketAddress.
Если канал привязан к адресу сокета домена Unix, адрес сокета является объектом UnixDomainSocketAddress.
- Определено в:
-
getLocalAddressв интерфейсеNetworkChannel - Возвращает:
SocketAddress, к которому привязан сокет, илиnull, если сокет канала не привязан- Выбрасывает:
-
ClosedChannelException— Если канал закрыт -
IOException— Если возникает ошибка ввода-вывода
© 1993, 2025, 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.