Класс 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 |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Этот метод предназначался для поддержки протоколов, которые теперь устарели. |
void |
setReceiveBufferSize |
Задаёт предполагаемое значение по умолчанию для параметра SO_RCVBUF сокетов, принимаемых этим ServerSocket. |
void |
setReuseAddress |
Включает или отключает параметр сокета SO_REUSEADDR. |
static void |
setSocketFactory |
Устарело. Используйте ServerSocketFactory и напрямую создайте подкласс ServerSocket. |
void |
setSoTimeout |
Включает или отключает SO_TIMEOUT с указанным тайм-аутом в миллисекундах. |
Set |
supportedOptions() |
Возвращает набор параметров сокета, поддерживаемых этим серверным сокетом. |
String |
toString() |
Возвращает адрес реализации и порт реализации этого сокета в виде String. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект какому-либо другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ждать пробуждения, обычно вследствие вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ждать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения указанного промежутка времени. |
final void |
wait |
Заставляет текущий поток ждать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения указанного промежутка времени. |
Подробное описание конструкторов
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того же типа: если Socket использует пользовательскую реализациюSocketImpl, выбрасываетсяIOException. Экземпляр этого класса, использующий пользовательскую реализацию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()
Если сокет был связан до вызова close, этот метод продолжит возвращать 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
@Deprecated(since="26", forRemoval=true) 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.