Класс ServerSocket
- Все реализуемые интерфейсы:
-
Closeable,AutoCloseable
- Непосредственные известные подклассы:
SSLServerSocket
public class ServerSocket extends Object implements Closeable
Фактическая работа сокета сервера выполняется экземпляром класса SocketImpl.
Класс ServerSocket определяет служебные методы для установки и получения нескольких параметров сокета. Этот класс также определяет методы setOption и getOption для установки и запроса параметров сокета. Сокет ServerSocket поддерживает следующие параметры:
Дополнительные (специфичные для реализации) параметры также могут быть поддерживаемы.
Имя параметра Описание SO_RCVBUFРазмер буфера приема сокета SO_REUSEADDRИспользование адреса повторно
- С:
- 1.0
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
| Создает развязанный сокет сервера. |
||
| Создает сокет сервера, привязанный к указанному порту. |
||
| Создает сокет сервера и привязывает его к указанному номеру локального порта с указанным значением очереди. |
||
| Создает сервер с указанным портом, значением очереди ожидания подключений и локальным IP-адресом для привязки. |
||
protected |
Создает сокет сервера с заданным пользователем SocketImpl. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Socket |
accept() |
Ожидает подключения к этому сокету и принимает его. |
void |
bind |
Привязывает ServerSocket к конкретному адресу (IP-адресу и номеру порта). |
void |
bind |
Привязывает ServerSocket к конкретному адресу (IP-адресу и номеру порта). |
void |
close() |
Закрывает этот сокет. |
ServerSocketChannel |
getChannel() |
Возвращает уникальный объект ServerSocketChannel, связанный с этим сокетом, если таковой имеется. |
InetAddress |
getInetAddress() |
Возвращает локальный адрес этого сокета сервера. |
int |
getLocalPort() |
Возвращает номер порта, на котором этот сокет прослушивает подключения. |
SocketAddress |
getLocalSocketAddress() |
Возвращает адрес конечной точки, к которой привязан этот сокет. |
<T> T |
getOption |
Возвращает значение параметра сокета. |
int |
getReceiveBufferSize() |
Получает значение параметра SO_RCVBUF для этого ServerSocket, то есть предполагаемый размер буфера, который будет использоваться для принятых Sockets от этого ServerSocket. |
boolean |
getReuseAddress() |
Проверяет, включен ли параметр SO_REUSEADDR. |
int |
getSoTimeout() |
Извлечение настроек для SO_TIMEOUT. 0 возвращает, если параметр отключен (т.е. таймаут бесконечен). |
protected final void |
implAccept |
Подклассы ServerSocket используют этот метод для переопределения accept() и возврата своего собственного подкласса сокета. |
boolean |
isBound() |
Возвращает состояние привязки ServerSocket. |
boolean |
isClosed() |
Возвращает состояние закрытия ServerSocket. |
<T> ServerSocket |
setOption |
Устанавливает значение параметра сокета. |
void |
setPerformancePreferences |
Устанавливает предпочтения производительности для этого ServerSocket. |
void |
setReceiveBufferSize |
Устанавливает предлагаемое значение по умолчанию для параметра SO_RCVBUF для сокетов, принятых от этого ServerSocket. |
void |
setReuseAddress |
Включение/выключение параметра сокета SO_REUSEADDR. |
static void |
setSocketFactory |
Устарело. |
void |
setSoTimeout |
Включает/выключает SO_TIMEOUT со значения таймаута в миллисекундах. |
Set |
supportedOptions() |
Возвращает набор параметров сокета, поддерживаемых этим сокетом сервера. |
String |
toString() |
Возвращает адрес и порт реализации этого сокета в качестве String. |
Подробное описание конструкторов
ServerSocket
protected ServerSocket(SocketImpl impl)
SocketImpl.- Параметры:
-
impl- экземпляр SocketImpl для использования в ServerSocket. - Исключения:
-
NullPointerException- если implnull. - С тех пор:
- 12
ServerSocket
public ServerSocket() throws IOException
- Исключения:
-
IOException- ошибка ввода-вывода при открытии сокета.
ServerSocket
public ServerSocket(int port) throws IOException
0 означает, что номер порта автоматически назначается, обычно из диапазона временных портов. Этот номер порта можно получить, вызвав getLocalPort. Максимальная длина очереди входящих соединений (запрос на подключение) установлена в 50. Если входящий запрос на подключение поступает, когда очередь заполнена, подключение отклоняется.
Если приложение указало фабрику реализации сокета сервера, метод createSocketImpl этой фабрики вызывается для создания фактической реализации сокета. В противном случае создаётся стандартная реализация сокета.
- Параметры:
-
port- номер порта или0для использования автоматически назначенного номера порта. - Исключения:
-
IOException- если произошла ошибка ввода-вывода при открытии сокета. -
IllegalArgumentException- если параметр порта находится вне указанного диапазона допустимых значений портов, который составляет от 0 до 65535 включительно.
ServerSocket
public ServerSocket(int port, int backlog) throws IOException
0 означает, что номер порта автоматически назначается, обычно из диапазона временных портов. Этот номер порта можно получить, вызвав getLocalPort. Максимальная длина очереди входящих запросов на подключение установлена в параметр backlog. Если входящий запрос на подключение поступает, когда очередь заполнена, подключение отклоняется.
Если приложение указало фабрику реализации сокета сервера, метод createSocketImpl этой фабрики вызывается для создания фактической реализации сокета. В противном случае создаётся стандартная реализация сокета. Параметр backlog - это запрашиваемая максимальная длина очереди ожидающих соединений. Её точное значение зависит от реализации. В частности, реализация может установить максимальную длину или игнорировать параметр. Указанное значение должно быть больше, чем 0. Если оно меньше или равно 0, будет использоваться значение по умолчанию, определённое реализацией.
- Параметры:
-
port- номер порта или0для использования автоматически назначенного номера порта. -
backlog- запрашиваемая максимальная длина очереди входящих соединений. - Исключения:
-
IOException- если при открытии сокета произошла ошибка ввода-вывода. -
IllegalArgumentException- если параметр порта находится вне указанного диапазона допустимых значений портов, который составляет от 0 до 65535 включительно.
ServerSocket
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException
0 означает, что номер порта автоматически назначается, обычно из диапазона временных портов. Этот номер порта можно получить, вызвав getLocalPort. Параметр backlog - это запрашиваемая максимальная длина очереди ожидающих соединений. Её точное значение зависит от реализации. В частности, реализация может установить максимальную длину или игнорировать параметр. Указанное значение должно быть больше, чем 0. Если оно меньше или равно 0, будет использоваться значение по умолчанию, определённое реализацией.- Параметры:
-
port- номер порта или0для использования автоматически назначенного номера порта. -
backlog- запрашиваемая максимальная длина очереди входящих соединений. -
bindAddr- локальный InetAddress, к которому будет привязываться сервер - Исключения:
-
IOException- если при открытии сокета произошла ошибка ввода-вывода. -
IllegalArgumentException- если параметр порта находится вне указанного диапазона допустимых значений портов, который составляет от 0 до 65535 включительно. - С тех пор:
- 1.1
Подробное описание методов
bind
public void bind(SocketAddress endpoint) throws IOException
ServerSocket к конкретному адресу (IP-адрес и номер порта). Если адрес null, система выберет временный порт и допустимый локальный адрес для привязки сокета.
- Параметры:
-
endpoint- IP-адрес и номер порта для привязки. - Исключения:
-
IOException- если операция привязки не удалась, сокет уже привязан или сокет закрыт. -
IllegalArgumentException- если endpoint - это подкласс SocketAddress, не поддерживаемый этим сокетом - С тех пор:
- 1.4
bind
public void bind(SocketAddress endpoint, int backlog) throws IOException
ServerSocket к конкретному адресу (IP-адрес и номер порта). Если адрес null, система выберет временный порт и допустимый локальный адрес для привязки сокета.
Параметр backlog - это запрашиваемая максимальная длина очереди ожидающих соединений. Её точное значение зависит от реализации. В частности, реализация может установить максимальную длину или игнорировать параметр. Указанное значение должно быть больше, чем 0. Если оно меньше или равно 0, будет использоваться значение по умолчанию, определённое реализацией.
- Параметры:
-
endpoint- IP-адрес и номер порта для привязки. -
backlog- запрашиваемая максимальная длина очереди входящих соединений. - Исключения:
-
IOException- если операция привязки не удалась, сокет уже привязан или сокет закрыт. -
IllegalArgumentException- если endpoint - это подкласс SocketAddress, не поддерживаемый этим сокетом - С тех пор:
- 1.4
getInetAddress
public InetAddress getInetAddress()
Если сокет был привязан до вызова closed, этот метод будет продолжать возвращать локальный адрес после закрытия сокета.
- Возвращает:
- адрес, к которому привязан этот сокет, или
null, если сокет не привязан.
getLocalPort
public int getLocalPort()
Если сокет был привязан до вызова closed, этот метод будет продолжать возвращать номер порта после закрытия сокета.
- Возвращает:
- номер порта, на котором прослушивается этот сокет, или -1, если сокет ещё не привязан.
getLocalSocketAddress
public SocketAddress getLocalSocketAddress()
Если сокет был привязан до вызова closed, этот метод будет продолжать возвращать адрес конечной точки после закрытия сокета.
- Возвращает:
- объект
SocketAddress, представляющий локальную конечную точку этого сокета, илиnull, если сокет ещё не привязан. - С тех пор:
- 1.4
- См. также:
accept
public Socket accept() throws IOException
Этот метод может быть прерван в следующих ситуациях:
- Сокет связан с
ServerSocketChannel. В этом случае прерывание потока, принимающего подключение, закроет базовый канал и вызовет исключениеClosedByInterruptExceptionс установленным состоянием прерывания. - Сокет использует системную реализацию сокетов и виртуальный поток принимает подключение. В этом случае прерывание виртуального потока заставит его проснуться и закрыть сокет. Метод затем выбросит исключение
SocketExceptionс установленным состоянием прерывания.
- Примечание реализации:
- Экземпляр этого класса, использующий системную реализацию
SocketImpl, принимает сокеты сSocketImplтого же типа, независимо от фабрики реализации сокета клиента, если она была установлена. - Возвращает:
- новый сокет
- Исключения:
-
IOException- если при ожидании подключения произошла ошибка ввода-вывода, сокет не привязан или закрыт. -
SocketTimeoutException- если ранее был установлен таймаут с помощью setSoTimeout и таймаут истек. -
IllegalBlockingModeException- если у этого сокета есть связанный канал, канал находится в режиме без блокировки и нет подключений, готовых к приему
implAccept
protected final void implAccept(Socket s) throws IOException
Поведение этого метода не определено, когда вызывается с сокетом, который не был вновь создан и не привязан. Любые параметры сокета, установленные на заданном сокете до вызова этого метода, могут быть или не быть сохранены при приёме подключения. Может быть невозможно принять подключение, если у этого сокета есть SocketImpl одного типа, а у данного сокета есть SocketImpl совершенно другого типа.
- Примечание реализации:
- Экземпляр этого класса, использующий системную реализацию
SocketImpl, может принять подключение с помощью сокета Socket сSocketImplтого же типа:IOExceptionгенерируется, если сокет использует пользовательскую реализациюSocketImpl. Экземпляр этого класса, использующий пользовательскую реализациюSocketImpl, не может принять подключение с помощью сокета Socket с системной реализациейSocketImpl. - Параметры:
-
s- сокет - Исключения:
-
IllegalBlockingModeException- если у этого сокета есть связанный канал, и канал находится в режиме без блокировки -
IOException- если при ожидании подключения произошла ошибка ввода-вывода или если для этого сокета невозможно принять подключение с заданным сокетом - С:
- 1.1
close
public void close() throws IOException
accept(), выбросит исключение SocketException. Если у этого сокета есть связанный канал, то канал также закрывается.
После закрытия несколько методов, определённых этим классом, выбросят исключение при вызове на закрытом сокете.
- Определено в:
-
closeв интерфейсеAutoCloseable - Определено в:
-
closeв интерфейсеCloseable - Исключения:
-
IOException- если при закрытии сокета произошла ошибка ввода-вывода.
getChannel
public ServerSocketChannel getChannel()
ServerSocketChannel, связанный с этим сокетом, если таковой имеется. У серверного сокета будет канал только в том случае, если сам канал был создан с помощью метода ServerSocketChannel.open.
- Возвращает:
- канал серверного сокета, связанный с этим сокетом, или
null, если этот сокет не был создан для канала - С:
- 1.4
isBound
public boolean isBound()
Если сокет был привязан до закрытия, этот метод будет продолжать возвращать true после закрытия сокета.
- Возвращает:
- true, если ServerSocket успешно привязан к адресу
- С:
- 1.4
isClosed
public boolean isClosed()
- Возвращает:
- true, если сокет был закрыт
- С:
- 1.4
setSoTimeout
public void setSoTimeout(int timeout) throws SocketException
SO_TIMEOUT со значением таймаута в миллисекундах. При установке положительного значения таймаута вызов accept() для этого ServerSocket будет блокироваться только на это время. Если таймаут истечёт, будет выброшено исключение SocketTimeoutException, хотя ServerSocket останется валидным. Таймаут 0 интерпретируется как бесконечный таймаут. Параметр обязательно должен быть включён до начала блокирующей операции, чтобы он имел эффект.- Параметры:
-
timeout- заданный таймаут в миллисекундах - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP, или сокет закрыт. -
IllegalArgumentException- еслиtimeoutотрицательно - С:
- 1.1
- См. также:
getSoTimeout
public int getSoTimeout() throws IOException
SO_TIMEOUT. Значение 0 означает, что опция отключена (т.е. таймаут бесконечен).- Возвращает:
- значение
SO_TIMEOUT - Исключения:
-
IOException- если произошла ошибка ввода-вывода или сокет закрыт. - С:
- 1.1
- См. также:
setReuseAddress
public void setReuseAddress(boolean on) throws SocketException
SO_REUSEADDR. При закрытии TCP-соединения соединение может оставаться в состоянии таймаута некоторое время после его закрытия (обычно известно как состояние TIME_WAIT или состояние ожидания 2MSL). Для приложений, использующих хорошо известный адрес сокета или порт, может быть невозможно привязать сокет к необходимому SocketAddress, если существует соединение в состоянии таймаута, связанное с этим адресом сокета или портом.
Включение SO_REUSEADDR перед привязкой сокета с помощью bind(SocketAddress) позволяет привязать сокет, даже если предыдущее соединение находится в состоянии таймаута.
При создании ServerSocket начальное значение SO_REUSEADDR не определено. Приложения могут использовать getReuseAddress() для определения начального значения SO_REUSEADDR.
Поведение при включении или отключении SO_REUSEADDR после привязки сокета (см. isBound()) не определено.
- Параметры:
-
on- включить или выключить опцию сокета - Исключения:
-
SocketException- если произошла ошибка при включении или отключении опции сокетаSO_REUSEADDR, или сокет закрыт. - С:
- 1.4
- См. также:
getReuseAddress
public boolean getReuseAddress() throws SocketException
SO_REUSEADDR.- Возвращает:
- значение, указывающее, включена ли
boolean. - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP, или сокет закрыт. - С:
- 1.4
- См. также:
toString
setSocketFactory
@Deprecated(since="17") public static void setSocketFactory(SocketImplFactory fac) throws IOException
ServerSocketFactory и подкласс ServerSocket напрямую. Этот метод в ранних версиях JDK предоставлял способ замены системной реализации
ServerSocket. Он в основном устарел с Java 1.4. Если требуется, можно создать ServerSocket для использования кастомной реализации, расширив ServerSocket и используя защищённый конструктор, который принимает реализацию в качестве параметра. Когда приложение создаёт новый сокет сервера, вызывается метод createSocketImpl фабрики реализации сокета для создания фактической реализации сокета.
Передача null в метод является бесполезной операцией, если фабрика ещё не была установлена.
- Параметры:
-
fac- требуемая фабрика. - Исключения:
-
IOException- если при установке фабрики сокета возникает ошибка ввода-вывода. -
SocketException- если фабрика уже определена. - См. также:
setReceiveBufferSize
public void setReceiveBufferSize(int size) throws SocketException
SO_RCVBUF для сокетов, принятых от этого ServerSocket. Фактическое значение, установленное в принятом сокете, должно быть определено вызовом Socket.getReceiveBufferSize() после того, как сокет был возвращён методом accept(). Значение SO_RCVBUF используется как для установки размера внутреннего буфера приёма сокета, так и для установки размера TCP-окна приёма, рекламируемого удалённому узлу.
Можно изменить это значение впоследствии, вызвав Socket.setReceiveBufferSize(int). Однако, если приложение хочет разрешить размер окна приёма больше 64К байт, как определено в RFC1323, то предлагаемое значение должно быть установлено в ServerSocket до привязки к локальному адресу. Это подразумевает, что ServerSocket должен быть создан с конструктором без аргументов, затем вызван setReceiveBufferSize(), и, наконец, ServerSocket привязывается к адресу с помощью bind().
Отсутствие этого действия не вызовет ошибки, и размер буфера может быть установлен до запрошенного значения, но TCP-окно приёма в сокетах, принятых от этого ServerSocket, не будет больше 64К байт.
- Параметры:
-
size- размер, на который нужно установить размер буфера приёма. Это значение должно быть больше 0. - Исключения:
-
SocketException- если возникает ошибка в базовом протоколе, например, TCP-ошибка, или сокет закрыт. -
IllegalArgumentException- если значение равно 0 или отрицательно. - С:
- 1.4
- См. также:
getReceiveBufferSize
public int getReceiveBufferSize() throws SocketException
SO_RCVBUF для этого ServerSocket, то есть предлагаемый размер буфера, который будет использоваться для сокетов, принятых от этого ServerSocket. Обратите внимание, что фактическое значение, установленное в принятом сокете, определяется вызовом Socket.getReceiveBufferSize().
- Возвращает:
- значение опции
SO_RCVBUFдля этогоSocket. - Исключения:
-
SocketException- если возникает ошибка в базовом протоколе, например, TCP-ошибка, или сокет закрыт. - С:
- 1.4
- См. также:
setPerformancePreferences
public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
Сокеты по умолчанию используют протокол TCP/IP. Некоторые реализации могут предлагать альтернативные протоколы, которые имеют разные характеристики производительности, чем TCP/IP. Этот метод позволяет приложению выразить свои предпочтения относительно того, как эти компромиссы должны быть сделаны, когда реализация выбирает из доступных протоколов.
Предпочтения производительности описываются тремя целыми числами, значения которых указывают на относительную важность короткого времени соединения, низкой задержки и высокой пропускной способности. Абсолютные значения целых чисел не имеют значения; для выбора протокола значения просто сравниваются, причём большие значения указывают на более сильные предпочтения. Например, если приложение предпочитает короткое время соединения перед низкой задержкой и высокой пропускной способностью, то оно может вызвать этот метод со значениями (1, 0, 0). Если приложение предпочитает высокую пропускную способность перед низкой задержкой, а низкую задержку перед коротким временем соединения, то оно может вызвать этот метод со значениями (0, 1, 2).
Вызов этого метода после привязки этого сокета не повлияет на него. Это подразумевает, что для использования этой возможности требуется создать сокет с конструктором без аргументов.
- Параметры:
-
connectionTime- Целое число, выражающее относительную важность короткого времени соединения -
latency- Целое число, выражающее относительную важность низкой задержки -
bandwidth- Целое число, выражающее относительную важность высокой пропускной способности - С:
- 1.5
setOption
public <T> ServerSocket setOption(SocketOption<T> name, T value) throws IOException
- Параметры типа:
T- Тип значения опции сокета- Параметры:
-
name- Опция сокета -
value- Значение опции сокета. Значениеnullможет быть допустимым для некоторых опций. - Возвращает:
- this ServerSocket
- Исключения:
-
UnsupportedOperationException- если сокет-сервер не поддерживает опцию. -
IllegalArgumentException- если значение не является допустимым для опции. -
IOException- если возникает ошибка ввода-вывода или сокет закрыт. -
NullPointerException- если имяnull - С:
- 9
getOption
public <T> T getOption(SocketOption<T> name) throws IOException
- Параметры типа:
T- Тип значения опции сокета- Параметры:
-
name- Опция сокета - Возвращает:
- Значение опции сокета.
- Исключения:
-
UnsupportedOperationException- если сокет-сервер не поддерживает опцию. -
IOException- если возникает ошибка ввода-вывода или сокет закрыт. -
NullPointerException- если имяnull - С:
- 9
supportedOptions
public Set<SocketOption<?>> supportedOptions()
- Возвращает:
- Набор опций сокета, поддерживаемых этим сокетом. Этот набор может быть пустым, если SocketImpl сокета не может быть создан.
- С:
- 9
© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/net/ServerSocket.html
ServerSocketFactoryи подклассServerSocketнапрямую.