Класс 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
Методы, объявленные в классе SelectableChannel
register
Методы, объявленные в классе AbstractInterruptibleChannel
begin, close, end, isOpen
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Методы, объявленные в интерфейсе 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- Если возникает другая ошибка ввода-вывода - Начиная с версии:
- 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/ServerSocketChannel.html