Класс 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, то есть предполагаемый размер буфера, который будет использоваться для сокетов, принимаемых этим 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— если 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
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того же типа независимо от того, задана ли фабрика реализации клиентских сокетов. - Возвращает:
- новый Socket
- Исключения:
-
IOException— если при ожидании соединения возникает ошибка ввода-вывода, сокет не связан или сокет закрыт. -
SocketTimeoutException— если ранее с помощью setSoTimeout был задан тайм-аут и его значение истекло. -
IllegalBlockingModeException— если с этим сокетом связан канал, канал работает в неблокирующем режиме и нет соединения, готового к приему
implAccept
protected final void implAccept(Socket s) throws IOException
Поведение этого метода не определено, если он вызывается с сокетом, который не является только что созданным и несвязанным. Параметры сокета, заданные до вызова этого метода, могут сохраниться или не сохраниться при принятии соединения. Принять соединение может оказаться невозможно, если этот сокет использует SocketImpl одного типа, а переданный сокет — SocketImpl совершенно другого типа.
- Примечание по реализации:
- Экземпляр этого класса, использующий системную реализацию
SocketImplпо умолчанию, может принять соединение с Socket, использующимSocketImplтого же типа: выбрасываетсяIOException, если Socket использует пользовательскуюSocketImpl. Экземпляр этого класса, использующий пользовательскуюSocketImpl, не может принять соединение с Socket, использующим системнуюSocketImplпо умолчанию. - Параметры:
-
s— Socket - Исключения:
-
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 остается действительным. Нулевой тайм-аут означает бесконечное ожидание. Чтобы параметр действовал, его необходимо включить до начала блокирующей операции.- Параметры:
-
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, указывающее, включен лиSO_REUSEADDR. - Исключения:
-
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—int, выражающее относительную важность короткого времени соединения -
latency—int, выражающее относительную важность низкой задержки -
bandwidth—int, выражающее относительную важность высокой пропускной способности - Начиная с:
- 1.5
setOption
public <T> ServerSocket setOption(SocketOption<T> name, T value) throws IOException
- Параметры типа:
T— тип значения параметра сокета- Параметры:
-
name— параметр сокета -
value— значение параметра сокета. Для некоторых параметров допустимым может быть значениеnull. - Возвращает:
- этот ServerSocket
- Исключения:
-
UnsupportedOperationException— если серверный сокет не поддерживает этот параметр. -
IllegalArgumentException— если значение недопустимо для этого параметра. -
IOException— если возникает ошибка ввода-вывода или сокет закрыт. -
NullPointerException— если name имеет значениеnull - Начиная с:
- 9
getOption
public <T> T getOption(SocketOption<T> name) throws IOException
- Параметры типа:
T— тип значения параметра сокета- Параметры:
-
name— параметр сокета - Возвращает:
- значение параметра сокета.
- Исключения:
-
UnsupportedOperationException— если серверный сокет не поддерживает этот параметр. -
IOException— если возникает ошибка ввода-вывода или сокет закрыт. -
NullPointerException— если name имеет значение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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/net/ServerSocket.html
ServerSocketFactoryи создавайте подклассServerSocketнапрямую.