Класс ServerSocket
- java.lang.Object
-
- java.net.ServerSocket
- Все реализуемые интерфейсы:
-
Closeable,AutoCloseable
- Прямые известные подклассы:
SSLServerSocket
public class ServerSocket extends Object implements Closeable
Этот класс реализует серверные сокеты. Серверный сокет ожидает запросы из сети. Он выполняет некоторую операцию на основе этого запроса и, возможно, возвращает результат запросившему.
Фактическая работа серверного сокета выполняется экземпляром класса SocketImpl. Приложение может изменить фабрику сокетов, которая создаёт реализацию сокета, чтобы настроить себя на создание сокетов, соответствующих локальному брандмауэру.
- С тех пор:
- 1.0
- См. также:
-
SocketImpl,setSocketFactory(java.net.SocketImplFactory),ServerSocketChannel
Конструкторы
| Конструктор | Описание |
|---|---|
ServerSocket() | Создаёт не привязанный серверный сокет. |
ServerSocket(int port) | Создаёт серверный сокет, привязанный к указанному порту. |
ServerSocket(int port,
int backlog) | Создаёт серверный сокет и привязывает его к указанному локальному номеру порта с указанным значением backlog. |
ServerSocket(int port,
int backlog,
InetAddress bindAddr) | Создаёт сервер с указанным портом, значением listen backlog и локальным IP-адресом для привязки. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
Socket | accept() | Ожидает подключения к этому сокету и принимает его. |
void | bind(SocketAddress endpoint) | Привязывает |
void | bind(SocketAddress endpoint,
int backlog) | Привязывает |
void | close() | Закрывает этот сокет. |
ServerSocketChannel | getChannel() | Возвращает уникальный объект |
InetAddress | getInetAddress() | Возвращает локальный адрес этого серверного сокета. |
int | getLocalPort() | Возвращает номер порта, на котором прослушивает этот сокет. |
SocketAddress | getLocalSocketAddress() | Возвращает адрес конечной точки, к которой привязан этот сокет. |
<T> T | getOption(SocketOption<T> name) | Возвращает значение параметра сокета. |
int | getReceiveBufferSize() | Получает значение параметра |
boolean | getReuseAddress() | Проверяет, включен ли параметр |
int | getSoTimeout() | Извлекает значение для |
protected 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) | Устанавливает значение по умолчанию для параметра |
void | setReuseAddress(boolean on) | Включает/отключает параметр сокета |
static void | setSocketFactory(SocketImplFactory fac) | Устанавливает фабрику реализации серверного сокета для приложения. |
void | setSoTimeout(int timeout) | Включает/отключает |
Set<SocketOption<?>> | supportedOptions() | Возвращает набор параметров сокета, поддерживаемых этим серверным сокетом. |
String | toString() | Возвращает адрес реализации и порт реализации этого сокета в виде |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait Конструкторы
ServerSocket
public ServerSocket()
throws IOException Создаёт серверный сокет без привязки.
- Исключения:
-
IOException- Ошибка ввода-вывода при открытии сокета.
ServerSocket
public ServerSocket(int port)
throws IOException Создаёт серверный сокет, привязанный к указанному порту. Значение 0 для номера порта означает, что номер порта будет автоматически распределён, обычно из диапазона временных портов. Этот номер порта можно получить, вызвав getLocalPort.
Максимальная длина очереди входящих соединений (запрос на подключение) установлена в 50. Если входящее соединение поступает, когда очередь заполнена, соединение отклоняется.
Если приложение указало фабрику серверных сокетов, метод createSocketImpl этой фабрики вызывается для создания фактической реализации сокета. В противном случае создаётся «обычный» сокет.
Если существует менеджер безопасности, его метод checkListen вызывается с аргументом port, чтобы убедиться в разрешении операции. Это может привести к исключению SecurityException.
- Параметры:
-
port- номер порта или0, чтобы использовать автоматически распределённый номер порта. - Исключения:
-
IOException- если при открытии сокета происходит ошибка ввода-вывода. -
SecurityException- если существует менеджер безопасности, и его методcheckListenне разрешает операцию. -
IllegalArgumentException- если параметр порта находится вне допустимого диапазона, который составляет от 0 до 65535 включительно. - См. также:
-
SocketImpl,SocketImplFactory.createSocketImpl(),setSocketFactory(java.net.SocketImplFactory),SecurityManager.checkListen(int)
ServerSocket
public ServerSocket(int port,
int backlog)
throws IOException Создаёт серверный сокет и привязывает его к указанному локальному номеру порта с указанной длиной очереди ожидающих подключений. Значение 0 для номера порта означает, что номер порта будет автоматически распределён, обычно из диапазона временных портов. Этот номер порта можно получить, вызвав getLocalPort.
Максимальная длина очереди входящих соединений (запрос на подключение) установлена в параметре backlog. Если входящее соединение поступает, когда очередь заполнена, соединение отклоняется.
Если приложение указало фабрику серверных сокетов, метод createSocketImpl этой фабрики вызывается для создания фактической реализации сокета. В противном случае создаётся «обычный» сокет.
Если существует менеджер безопасности, его метод checkListen вызывается с аргументом port, чтобы убедиться в разрешении операции. Это может привести к исключению SecurityException. Аргумент backlog – запрашиваемая максимальная длина очереди ожидающих подключений к сокету. Его точное значение зависит от реализации. В частности, реализация может установить максимальную длину или игнорировать параметр. Указанное значение должно быть больше 0. Если оно меньше или равно 0, будет использоваться значение по умолчанию, зависящее от реализации.
- Параметры:
-
port- номер порта или0, чтобы использовать автоматически распределённый номер порта. -
backlog- запрашиваемая максимальная длина очереди входящих соединений. - Исключения:
-
IOException- если при открытии сокета происходит ошибка ввода-вывода. -
SecurityException- если существует менеджер безопасности, и его методcheckListenне разрешает операцию. -
IllegalArgumentException- если параметр порта находится вне допустимого диапазона, который составляет от 0 до 65535 включительно. - См. также:
-
SocketImpl,SocketImplFactory.createSocketImpl(),setSocketFactory(java.net.SocketImplFactory),SecurityManager.checkListen(int)
ServerSocket
public ServerSocket(int port,
int backlog,
InetAddress bindAddr)
throws IOException Создаёт сервер с указанным портом, длиной очереди подключений и локальным IP-адресом для привязки. Аргумент bindAddr может использоваться на многоадресной машине для ServerSocket, который будет принимать только запросы на подключение к одному из его адресов. Если bindAddr равен null, сервер будет принимать подключения ко всем локальным адресам. Порт должен быть в диапазоне от 0 до 65535 включительно. Значение 0 для номера порта означает, что номер порта будет автоматически распределён, обычно из диапазона временных портов. Этот номер порта можно получить, вызвав getLocalPort.
Если существует менеджер безопасности, этот метод вызывает его метод checkListen с аргументом port, чтобы убедиться в разрешении операции. Это может привести к исключению SecurityException. Аргумент backlog – запрашиваемая максимальная длина очереди ожидающих подключений к сокету. Его точное значение зависит от реализации. В частности, реализация может установить максимальную длину или игнорировать параметр. Указанное значение должно быть больше 0. Если оно меньше или равно 0, будет использоваться значение по умолчанию, зависящее от реализации.
- Параметры:
-
port- номер порта или0, чтобы использовать автоматически распределённый номер порта. -
backlog- запрашиваемая максимальная длина очереди входящих соединений. -
bindAddr- локальный InetAddress, к которому будет привязан сервер - Исключения:
-
SecurityException- если существует менеджер безопасности, и его методcheckListenне разрешает операцию. -
IOException- если при открытии сокета происходит ошибка ввода-вывода. -
IllegalArgumentException- если параметр порта находится вне допустимого диапазона, который составляет от 0 до 65535 включительно. - С:
- 1.1
- См. также:
-
SocketOptions,SocketImpl,SecurityManager.checkListen(int)
Методы
bind
public void bind(SocketAddress endpoint)
throws IOException Связывает сокет с указанным адресом (IP-адрес и номер порта).
Если адрес является null, тогда система выберет свободный порт и действительный локальный адрес для привязки сокета.
- Параметры:
-
endpoint- IP-адрес и номер порта для привязки. - Исключения:
-
IOException- если операция привязки не удалась или сокет уже привязан. -
SecurityException- если присутствуетSecurityManagerи его методcheckListenне разрешает операцию. -
IllegalArgumentException- если тип SocketAddress не поддерживается данным сокетом - С тех пор:
- 1.4
bind
public void bind(SocketAddress endpoint,
int backlog)
throws IOException Связывает сокет с указанным адресом (IP-адрес и номер порта).
Если адрес является null, тогда система выберет свободный порт и действительный локальный адрес для привязки сокета.
Аргумент backlog представляет собой запрашиваемое максимальное количество ожидающих подключений к сокету. Его точное значение зависит от реализации. В частности, реализация может установить максимальную длину или игнорировать параметр. Значение должно быть больше 0. Если оно меньше или равно 0, будет использоваться реализационно-зависимое значение по умолчанию.
- Параметры:
-
endpoint- IP-адрес и номер порта для привязки. -
backlog- запрашиваемая максимальная длина очереди входящих подключений. - Исключения:
-
IOException- если операция привязки не удалась или сокет уже привязан. -
SecurityException- если присутствуетSecurityManagerи его методcheckListenне разрешает операцию. -
IllegalArgumentException- если тип SocketAddress не поддерживается данным сокетом - С тех пор:
- 1.4
getInetAddress
public InetAddress getInetAddress()
Возвращает локальный адрес данного серверного сокета.
Если сокет был привязан до вызова closed, метод продолжит возвращать локальный адрес после закрытия сокета.
Если установлен менеджер безопасности, его метод checkConnect вызывается с локальным адресом и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается адрес loopback.
- Возвращает:
- адрес, к которому привязан сокет, или адрес обратной связи, если доступ к нему запрещён менеджером безопасности, или
nullесли сокет не привязан. - См. также:
SecurityManager.checkConnect(java.lang.String, int)
getLocalPort
public int getLocalPort()
Возвращает номер порта, на котором прослушивает этот сокет.
Если сокет был привязан до вызова closed, метод продолжит возвращать номер порта после закрытия сокета.
- Возвращает:
- номер порта, на котором прослушивает сокет, или -1, если сокет ещё не привязан.
getLocalSocketAddress
public SocketAddress getLocalSocketAddress()
Возвращает адрес конечной точки, к которой привязан данный сокет.
Если сокет был привязан до вызова closed, метод продолжит возвращать адрес конечной точки после закрытия сокета.
Если установлен менеджер безопасности, его метод checkConnect вызывается с локальным адресом и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается SocketAddress, представляющий адрес loopback и локальный порт, к которому привязан сокет.
- Возвращает:
- объект
SocketAddressпредставляющий локальную конечную точку этого сокета, илиSocketAddressпредставляющий адрес обратной связи, если доступ к нему запрещён менеджером безопасности, илиnullесли сокет ещё не привязан. - С тех пор:
- 1.4
- См. также:
-
getInetAddress(),getLocalPort(),bind(SocketAddress),SecurityManager.checkConnect(java.lang.String, int)
accept
public Socket accept()
throws IOException Ожидает подключения к этому сокету и принимает его. Метод блокируется до тех пор, пока подключение не будет установлено.
Создаётся новый сокет s. Если установлен менеджер безопасности, метод checkAccept менеджера вызывается с s.getInetAddress().getHostAddress() и s.getPort() в качестве аргументов, чтобы убедиться, что операция разрешена. В результате может быть выброшено исключение SecurityException.
- Возвращает:
- новый сокет
- Исключения:
-
IOException- если при ожидании подключения произошла ошибка ввода-вывода. -
SecurityException- если менеджер безопасности существует и его методcheckAcceptне разрешает операцию. -
SocketTimeoutException- если для этого сокета был установлен таймаут с помощью setSoTimeout, и таймаут истек. -
IllegalBlockingModeException- если у данного сокета есть связанный канал, канал находится в режиме без блокировки, и нет подключения, готового к приёму - См. также:
SecurityManager.checkAccept(java.lang.String, int)
implAccept
protected final void implAccept(Socket s)
throws IOException Подклассы ServerSocket используют этот метод для переопределения accept(), чтобы вернуть свой собственный подкласс сокета. Например, FooServerSocket обычно передаёт этот метод пустому FooSocket. После возврата из implAccept сокет FooSocket будет подключён к клиенту.
- Параметры:
-
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, если ServerSocket успешно привязан к адресу
- С тех пор:
- 1.4
isClosed
public boolean isClosed()
Возвращает состояние закрытия ServerSocket.
- Возвращает:
- true, если сокет был закрыт
- С тех пор:
- 1.4
setSoTimeout
public void setSoTimeout(int timeout)
throws SocketException Включает/выключает SO_TIMEOUT с заданным таймаутом в миллисекундах. При установке ненулевого таймаута вызов accept() для этого ServerSocket будет блокироваться только на это время. Если таймаут истечёт, будет вызвано исключение java.net.SocketTimeoutException, хотя ServerSocket остаётся допустимым. Таймаут необходимо установить до выполнения блокирующей операции, чтобы он имел эффект. Таймаут должен быть > 0. Таймаут 0 интерпретируется как бесконечный таймаут.
- Параметры:
-
timeout- заданный таймаут в миллисекундах - Исключения:
-
SocketException- если произошла ошибка в базовом протоколе, например, ошибка TCP. - С тех пор:
- 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) позволяет привязать сокет, даже если предыдущее соединение находится в состоянии таймаута.
При создании сокета начальное значение 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.
- Возвращает:
- значение, указывающее, включён ли параметр
SO_REUSEADDR. - Выбрасывает:
-
SocketException- если в базовом протоколе произошла ошибка, например, ошибка TCP. - С тех пор:
- 1.4
- См. также:
setReuseAddress(boolean)
toString
public String toString()
Возвращает адрес и порт реализации этого сокета в виде String.
Если установлен менеджер безопасности, его метод checkConnect вызывается с локальным адресом и -1 в качестве аргументов, чтобы проверить, разрешено ли выполнение операции. Если операция не разрешена, в качестве адреса реализации возвращается строка, представляющая loopback адрес.
setSocketFactory
public static void setSocketFactory(SocketImplFactory fac)
throws IOException Устанавливает фабрику реализации серверного сокета для приложения. Фабрика может быть установлена только один раз.
При создании нового серверного сокета приложением вызывается метод createSocketImpl фабрики реализации сокета для создания фактической реализации сокета.
Передача null в метод — это пустая операция, если фабрика еще не была установлена.
Если установлен менеджер безопасности, этот метод сначала вызывает метод checkSetFactory менеджера безопасности, чтобы убедиться, что операция разрешена. Это может привести к исключению SecurityException.
- Параметры:
-
fac- нужная фабрика. - Выбрасывает:
-
IOException- если при установке фабрики сокета произошла ошибка ввода/вывода. -
SocketException- если фабрика уже определена. -
SecurityException- если менеджер безопасности существует и его методcheckSetFactoryне разрешает операцию. - См. также:
-
SocketImplFactory.createSocketImpl(),SecurityManager.checkSetFactory()
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может быть допустимым для некоторых параметров. - Возвращает:
- этот ServerSocket
- Выбрасывает:
-
UnsupportedOperationException- если серверный сокет не поддерживает параметр. -
IllegalArgumentException- если значение не является допустимым для параметра. -
IOException- если произошла ошибка ввода/вывода или сокет закрыт. -
SecurityException- если установлен менеджер безопасности, и для параметра сокета требуется разрешение безопасности, и у вызывающего объекта нет требуемого разрешения.StandardSocketOptionsне требуют никакого разрешения безопасности. - С тех пор:
- 9
getOption
public <T> T getOption(SocketOption<T> name)
throws IOException Возвращает значение параметра сокета.
- Параметры типов:
-
T- тип значения параметра сокета - Параметры:
-
name- параметр сокета - Возвращает:
- Значение параметра сокета.
- Выбрасывает:
-
UnsupportedOperationException- если серверный сокет не поддерживает параметр. -
IOException- если произошла ошибка ввода/вывода или сокет закрыт. -
NullPointerException- если имя являетсяnull -
SecurityException- если установлен менеджер безопасности, и для параметра сокета требуется разрешение безопасности, и у вызывающего объекта нет требуемого разрешения.StandardSocketOptionsне требуют никакого разрешения безопасности. - С тех пор:
- 9
supportedOptions
public Set<SocketOption<?>> supportedOptions()
Возвращает набор параметров сокета, поддерживаемых этим серверным сокетом. Этот метод будет продолжать возвращать набор параметров даже после закрытия сокета.
- Возвращает:
- Набор параметров сокета, поддерживаемых этим сокетом. Этот набор может быть пустым, если SocketImpl сокета не может быть создан.
- С тех пор:
- 9
© 1993, 2020, 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/11/docs/api/java.base/java/net/ServerSocket.html