Spec-Zone.ru › OpenJDK 24

Класс ServerSocket

java.lang.Object
java.net.ServerSocket
Все реализуемые интерфейсы:
Closeable, AutoCloseable
Непосредственные известные подклассы:
SSLServerSocket
public class ServerSocket extends Object implements Closeable
Этот класс реализует сокеты сервера. Сокет сервера ожидает запросы по сети. Он выполняет некоторое действие на основе этого запроса и, возможно, возвращает результат запросившему.

Фактическая работа сокета сервера выполняется экземпляром класса SocketImpl.

Класс ServerSocket определяет служебные методы для установки и получения нескольких параметров сокета. Этот класс также определяет методы setOption и getOption для установки и запроса параметров сокета. Сокет ServerSocket поддерживает следующие параметры:

Параметры сокета
Имя параметра Описание
SO_RCVBUF Размер буфера приема сокета
SO_REUSEADDR Использование адреса повторно
Дополнительные (специфичные для реализации) параметры также могут быть поддерживаемы.
С:
1.0
См. также:
  • SocketImpl
  • ServerSocketChannel

Краткое описание конструкторов

ServerSocket()
ServerSocket(int port)
ServerSocket(int port, int backlog)
ServerSocket(int port, int backlog, InetAddress bindAddr)
ServerSocket(SocketImpl impl)
Модификатор Конструктор Описание
Создает развязанный сокет сервера.
Создает сокет сервера, привязанный к указанному порту.
Создает сокет сервера и привязывает его к указанному номеру локального порта с указанным значением очереди.
Создает сервер с указанным портом, значением очереди ожидания подключений и локальным IP-адресом для привязки.
protected
Создает сокет сервера с заданным пользователем SocketImpl.

Краткое описание методов

Модификатор и тип Метод Описание
Socket accept()
Ожидает подключения к этому сокету и принимает его.
void bind(SocketAddress endpoint)
Привязывает ServerSocket к конкретному адресу (IP-адресу и номеру порта).
void bind(SocketAddress endpoint, int backlog)
Привязывает ServerSocket к конкретному адресу (IP-адресу и номеру порта).
void close()
Закрывает этот сокет.
ServerSocketChannel getChannel()
Возвращает уникальный объект ServerSocketChannel, связанный с этим сокетом, если таковой имеется.
InetAddress getInetAddress()
Возвращает локальный адрес этого сокета сервера.
int getLocalPort()
Возвращает номер порта, на котором этот сокет прослушивает подключения.
SocketAddress getLocalSocketAddress()
Возвращает адрес конечной точки, к которой привязан этот сокет.
<T> T getOption(SocketOption<T> name)
Возвращает значение параметра сокета.
int getReceiveBufferSize()
Получает значение параметра SO_RCVBUF для этого ServerSocket, то есть предполагаемый размер буфера, который будет использоваться для принятых Sockets от этого ServerSocket.
boolean getReuseAddress()
Проверяет, включен ли параметр SO_REUSEADDR.
int getSoTimeout()
Извлечение настроек для SO_TIMEOUT. 0 возвращает, если параметр отключен (т.е. таймаут бесконечен).
protected final void implAccept(Socket s)
Подклассы ServerSocket используют этот метод для переопределения accept() и возврата своего собственного подкласса сокета.
boolean isBound()
Возвращает состояние привязки ServerSocket.
boolean isClosed()
Возвращает состояние закрытия ServerSocket.
<T> ServerSocket setOption(SocketOption<T> name, T value)
Устанавливает значение параметра сокета.
void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
Устанавливает предпочтения производительности для этого ServerSocket.
void setReceiveBufferSize(int size)
Устанавливает предлагаемое значение по умолчанию для параметра SO_RCVBUF для сокетов, принятых от этого ServerSocket.
void setReuseAddress(boolean on)
Включение/выключение параметра сокета SO_REUSEADDR.
static void setSocketFactory(SocketImplFactory fac)
Устарело.
Используйте ServerSocketFactory и подкласс ServerSocket напрямую.
void setSoTimeout(int timeout)
Включает/выключает SO_TIMEOUT со значения таймаута в миллисекундах.
Set<SocketOption<?>> supportedOptions()
Возвращает набор параметров сокета, поддерживаемых этим сокетом сервера.
String toString()
Возвращает адрес и порт реализации этого сокета в качестве String.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

ServerSocket

protected ServerSocket(SocketImpl impl)
Создаёт сокет сервера с указанным SocketImpl.
Параметры:
impl - экземпляр SocketImpl для использования в ServerSocket.
Исключения:
NullPointerException - если impl null.
С тех пор:
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
Создаёт сокет сервера и привязывает его к указанному локальному номеру порта с указанным параметром backlog. Значение порта 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
Создаёт сервер с указанным портом, параметром backlog и локальным IP-адресом для привязки. Параметр bindAddr можно использовать на хосте с несколькими сетевыми интерфейсами для ServerSocket, который будет принимать только запросы на подключение к одному из его адресов. Если bindAddr равен null, то ServerSocket будет принимать подключения по всем локальным адресам. Порт должен быть в диапазоне от 0 до 65535 включительно. Значение порта 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
См. также:
  • getInetAddress()
  • getLocalPort()
  • bind(SocketAddress)

accept

public Socket accept() throws IOException
Принимает подключение к этому сокету. Метод блокируется до установления соединения.

Этот метод может быть прерван в следующих ситуациях:

  1. Сокет связан с ServerSocketChannel. В этом случае прерывание потока, принимающего подключение, закроет базовый канал и вызовет исключение ClosedByInterruptException с установленным состоянием прерывания.
  2. Сокет использует системную реализацию сокетов и виртуальный поток принимает подключение. В этом случае прерывание виртуального потока заставит его проснуться и закрыть сокет. Метод затем выбросит исключение SocketException с установленным состоянием прерывания.
Примечание реализации:
Экземпляр этого класса, использующий системную реализацию SocketImpl, принимает сокеты с SocketImpl того же типа, независимо от фабрики реализации сокета клиента, если она была установлена.
Возвращает:
новый сокет
Исключения:
IOException - если при ожидании подключения произошла ошибка ввода-вывода, сокет не привязан или закрыт.
SocketTimeoutException - если ранее был установлен таймаут с помощью setSoTimeout и таймаут истек.
IllegalBlockingModeException - если у этого сокета есть связанный канал, канал находится в режиме без блокировки и нет подключений, готовых к приему

implAccept

protected final void implAccept(Socket s) throws IOException
Подклассы ServerSocket используют этот метод для переопределения accept() для возврата собственного подкласса сокета. Например, FooServerSocket обычно передаёт этому методу вновь созданный, не привязанный сокет FooSocket. После возврата из implAccept сокет FooSocket будет подключён к клиенту.

Поведение этого метода не определено, когда вызывается с сокетом, который не был вновь создан и не привязан. Любые параметры сокета, установленные на заданном сокете до вызова этого метода, могут быть или не быть сохранены при приёме подключения. Может быть невозможно принять подключение, если у этого сокета есть 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()
Возвращает состояние привязки ServerSocket.

Если сокет был привязан до закрытия, этот метод будет продолжать возвращать true после закрытия сокета.

Возвращает:
true, если ServerSocket успешно привязан к адресу
С:
1.4

isClosed

public boolean isClosed()
Возвращает состояние закрытия ServerSocket.
Возвращает:
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()

getSoTimeout

public int getSoTimeout() throws IOException
Получение значения SO_TIMEOUT. Значение 0 означает, что опция отключена (т.е. таймаут бесконечен).
Возвращает:
значение SO_TIMEOUT
Исключения:
IOException - если произошла ошибка ввода-вывода или сокет закрыт.
С:
1.1
См. также:
  • setSoTimeout(int)

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()
  • bind(SocketAddress)
  • isBound()
  • isClosed()

getReuseAddress

public boolean getReuseAddress() throws SocketException
Проверяет, включена ли опция SO_REUSEADDR.
Возвращает:
значение, указывающее, включена ли boolean.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP, или сокет закрыт.
С:
1.4
См. также:
  • setReuseAddress(boolean)

toString

public String toString()
Возвращает реализуемый адрес и реализуемый порт этого сокета в виде String.
Переопределяет:
toString в классе Object
Возвращает:
строковое представление этого сокета.

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 - если фабрика уже определена.
См. также:
  • SocketImplFactory.createSocketImpl()

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()

getReceiveBufferSize

public int getReceiveBufferSize() throws SocketException
Возвращает значение опции SO_RCVBUF для этого ServerSocket, то есть предлагаемый размер буфера, который будет использоваться для сокетов, принятых от этого ServerSocket.

Обратите внимание, что фактическое значение, установленное в принятом сокете, определяется вызовом Socket.getReceiveBufferSize().

Возвращает:
значение опции SO_RCVBUF для этого Socket.
Исключения:
SocketException - если возникает ошибка в базовом протоколе, например, TCP-ошибка, или сокет закрыт.
С:
1.4
См. также:
  • setReceiveBufferSize(int)

setPerformancePreferences

public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
Устанавливает предпочтения производительности для этого ServerSocket.

Сокеты по умолчанию используют протокол 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API