Spec-Zone.ru › OpenJDK 8

Класс ServerSocket

  • java.lang.Object
    • java.net.ServerSocket
Все реализуемые интерфейсы:
Closeable, AutoCloseable
Прямые известные подклассы:
SSLServerSocket

public class ServerSocket
extends Object
implements Closeable

Этот класс реализует сокеты сервера. Сокет сервера ожидает запросы по сети. Он выполняет некоторую операцию на основе этого запроса и, возможно, возвращает результат запрашивающему.

Фактическая работа сокета сервера выполняется экземпляром класса SocketImpl. Приложение может изменить фабрику сокетов, создающую реализацию сокета, чтобы настроить себя на создание сокетов, соответствующих локальному брандмауэру.

С тех пор:
JDK1.0
См. также:
SocketImpl, setSocketFactory(java.net.SocketImplFactory), ServerSocketChannel

Конструкторы

Конструктор и описание
ServerSocket()

Создаёт свободный сокет сервера.

ServerSocket(int port)

Создаёт сокет сервера, привязанный к указанному порту.

ServerSocket(int port, int backlog)

Создаёт сокет сервера и привязывает его к указанному локальному номеру порта с указанным значением очереди.

ServerSocket(int port, int backlog, InetAddress bindAddr)

Создаёт сервер с указанным портом, размером очереди и локальным IP-адресом для привязки.

Методы

Модификатор и тип Метод и описание
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()

Возвращает адрес конечной точки, к которой привязан этот сокет.

int getReceiveBufferSize()

Получает значение параметра SO_RCVBUF для этого ServerSocket, то есть предлагаемый размер буфера, который будет использоваться для сокетов, принятых от этого ServerSocket.

boolean getReuseAddress()

Проверяет, включён ли SO_REUSEADDR.

int getSoTimeout()

Извлекает значение для SO_TIMEOUT.

protected void implAccept(Socket s)

Подклассы ServerSocket используют этот метод для переопределения accept(), чтобы возвращать собственный подкласс сокета.

boolean isBound()

Возвращает состояние привязки ServerSocket.

boolean isClosed()

Возвращает состояние закрытия ServerSocket.

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)

Устанавливает фабрику реализации сокета сервера для приложения.

void setSoTimeout(int timeout)

Включает/выключает SO_TIMEOUT с указанным тайм-аутом в миллисекундах.

String toString()

Возвращает адрес и порт реализации этого сокета в виде String.

Методы, унаследованные от класса 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.
C момента:
JDK1.1
См. также:
SocketOptions, SocketImpl, SecurityManager.checkListen(int)

Методы

bind

public void bind(SocketAddress endpoint)
          throws IOException

Привязывает ServerSocket к конкретному адресу (IP-адрес и номер порта).

Если адрес null, система выберет временный порт и допустимый локальный адрес для привязки сокета.

Параметры:
endpoint - IP-адрес и номер порта для привязки.
Исключения:
IOException - если операция привязки завершилась неудачей или сокет уже привязан.
SecurityException - если присутствует менеджер безопасности и его метод SecurityManager не разрешает операцию.
IllegalArgumentException - если тип SocketAddress не поддерживается данным сокетом
C момента:
1.4

bind

public void bind(SocketAddress endpoint,
                 int backlog)
          throws IOException

Привязывает ServerSocket к конкретному адресу (IP-адрес и номер порта).

Если адрес null, система выберет временный порт и допустимый локальный адрес для привязки сокета.

Аргумент backlog - это запрашиваемая максимальная длина очереди ожидающих подключений к сокету. Точное значение зависит от реализации. В частности, реализация может установить максимальную длину или вообще игнорировать параметр. Предоставленное значение должно быть больше 0. Если оно меньше или равно 0, будет использоваться реализационно-зависимое значение по умолчанию.

Параметры:
endpoint - IP-адрес и номер порта для привязки.
backlog - запрашиваемая максимальная длина очереди входящих подключений.
Исключения:
IOException - если операция привязки завершилась неудачей или сокет уже привязан.
SecurityException - если присутствует менеджер безопасности и его метод SecurityManager не разрешает операцию.
IllegalArgumentException - если тип SocketAddress не поддерживается данным сокетом
C момента:
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 - если при ожидании подключения возникает ошибка ввода-вывода.
С:
JDK1.1

close

public void close()
           throws IOException

Закрывает этот сокет. Любой поток, заблокированный в accept(), выбросит исключение SocketException.

Если этому сокету связан канал, то канал также закрывается.

Определено в:
close в интерфейсе Closeable
Определено в:
close в интерфейсе AutoCloseable
Исключения:
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 ошибка.
С:
JDK1.1
См. также:
getSoTimeout()

getSoTimeout

public int getSoTimeout()
                 throws IOException

Получить значение параметра SO_TIMEOUT. Значение 0 означает, что параметр отключен (т.е., таймаут бесконечен).

Возвращает:
значение SO_TIMEOUT
Исключения:
IOException - если возникает ошибка ввода-вывода
С:
JDK1.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, указывающее, включена ли опция SO_REUSEADDR.
Исключения:
SocketException - если возникает ошибка в базовом протоколе, например, TCP ошибка.
С:
1.4
См. также:
setReuseAddress(boolean)

toString

public String toString()

Возвращает адрес и порт реализации этого сокета в виде String.

Если установлен менеджер безопасности, вызывается его метод checkConnect с локальным адресом и -1 в качестве аргументов, чтобы проверить разрешение операции. Если операция не разрешена, возвращается объект InetAddress , представляющий адрес loopback.

Переопределяет:
toString в классе Object
Возвращает:
строковое представление этого сокета.

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

© 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.

Spec-Zone.ru

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