Класс SocketChannel

Все реализуемые интерфейсы:
Closeable, AutoCloseable, ByteChannel, Channel, GatheringByteChannel, InterruptibleChannel, NetworkChannel, ReadableByteChannel, ScatteringByteChannel, WritableByteChannel
public abstract class SocketChannel
extends AbstractSelectableChannel
implements ByteChannel, ScatteringByteChannel, GatheringByteChannel, NetworkChannel

Выбираемый канал для сокетов с потоковым соединением.

Канал сокета создается путем вызова одного из методов open этого класса. Невозможно создать канал для произвольного существующего сокета. Новый созданный канал сокета открыт, но еще не подключен. Попытка вызвать операцию ввода-вывода на отключенном канале приведет к сбросу NotYetConnectedException. Канал сокета можно подключить, вызвав его метод connect; после подключения, канал сокета остается подключенным до его закрытия. Подключен ли канал сокета, можно определить, вызвав его метод isConnected.

Канал сокета поддерживает неблокирующее подключение: Канал сокета можно создать, и процесс установления соединения с удаленным сокетом можно начать с помощью метода connect для последующего завершения методом finishConnect. В процессе ли операция подключения можно определить, вызвав метод isConnectionPending.

Канал сокета поддерживает асинхронное закрытие, которое аналогично асинхронной операции закрытия, указанной в классе Channel. Если входная сторона сокета закрывается одной нитью, в то время как другая нить заблокирована в операции чтения на канале сокета, то операция чтения в заблокированной нити завершится без чтения каких-либо байтов и вернет -1. Если выходная сторона сокета закрывается одной нитью, в то время как другая нить заблокирована в операции записи на канале сокета, то заблокированная нить получит AsynchronousCloseException.

Параметры сокета настраиваются с помощью метода setOption. Канал сокета поддерживает следующие параметры:

Имя параметра Описание
SO_SNDBUF Размер буфера отправки сокета
SO_RCVBUF Размер буфера приема сокета
SO_KEEPALIVE Поддерживать соединение активным
SO_REUSEADDR Повторное использование адреса
SO_LINGER Задержка при закрытии, если данные присутствуют (только при настройке в блокирующем режиме)
TCP_NODELAY Отключить алгоритм Nagle
Дополнительные (специфичные для реализации) параметры также могут быть поддерживаемы.

Каналы сокетов безопасны для использования несколькими параллельными потоками. Они поддерживают одновременное чтение и запись, хотя в любой момент может происходить чтение только одного потока и запись только одного потока. Методы connect и finishConnect взаимно синхронизируются друг с другом, и попытка инициировать операцию чтения или записи во время выполнения одного из этих методов заблокирует выполнение до завершения вызова.

С момента:
1.4

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

Модификатор Конструктор Описание
protected SocketChannel​(SelectorProvider provider)

Инициализирует новый экземпляр этого класса.

Методы

Модификатор и тип Метод Описание
abstract SocketChannel bind​(SocketAddress local)

Привязывает сокет канала к локальному адресу.

abstract boolean connect​(SocketAddress remote)

Подключает сокет этого канала.

abstract boolean finishConnect()

Завершает процесс подключения канала сокета.

abstract SocketAddress getLocalAddress()

Возвращает адрес сокета, к которому привязан сокет этого канала.

abstract SocketAddress getRemoteAddress()

Возвращает удаленный адрес, к которому подключен сокет этого канала.

abstract boolean isConnected()

Указывает, подключен ли сетевой сокет этого канала.

abstract boolean isConnectionPending()

Указывает, происходит ли операция подключения на этом канале.

static SocketChannel open()

Открывает канал сокета.

static SocketChannel open​(SocketAddress remote)

Открывает канал сокета и подключает его к удаленному адресу.

abstract int read​(ByteBuffer dst)

Считывает последовательность байтов из этого канала в указанный буфер.

long read​(ByteBuffer[] dsts)

Считывает последовательность байтов из этого канала в заданные буферы.

abstract long read​(ByteBuffer[] dsts, int offset, int length)

Считывает последовательность байтов из этого канала в подпоследовательность заданных буферов.

abstract <T> SocketChannel setOption​(SocketOption<T> name, T value)

Устанавливает значение параметра сокета.

abstract SocketChannel shutdownInput()

Закрывает соединение для чтения без закрытия канала.

abstract SocketChannel shutdownOutput()

Закрывает соединение для записи без закрытия канала.

abstract Socket socket()

Возвращает сокет, связанный с этим каналом.

int validOps()

Возвращает набор операций, определяющий поддерживаемые операции этого канала.

abstract int write​(ByteBuffer src)

Записывает последовательность байтов в этот канал из заданного буфера.

long write​(ByteBuffer[] srcs)

Записывает последовательность байтов в этот канал из заданных буферов.

abstract long write​(ByteBuffer[] srcs, int offset, int length)

Записывает последовательность байтов в этот канал из подпоследовательности заданных буферов.

Методы, объявленные в классе java.nio.channels.spi.AbstractSelectableChannel

configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, provider, register

Методы, объявленные в классе java.nio.channels.SelectableChannel

blockingLock, isBlocking, isRegistered, keyFor, register

Методы, объявленные в классе java.nio.channels.spi.AbstractInterruptibleChannel

begin, close, end

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

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

Методы, объявленные в интерфейсе java.nio.channels.Channel

isOpen

Методы, объявленные в интерфейсе java.nio.channels.NetworkChannel

getOption, supportedOptions

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

SocketChannel

protected SocketChannel(SelectorProvider provider)

Инициализирует новый экземпляр этого класса.

Параметры:
provider - Провайдер, создавший этот канал

Методы

open

public static SocketChannel open()
                          throws IOException

Открывает сокет-канал.

Новый канал создаётся путём вызова метода openSocketChannel системного глобального объекта SelectorProvider.

Возвращает:
Новый сокет-канал
Исключение:
IOException - Если произошла ошибка ввода-вывода

open

public static SocketChannel open(SocketAddress remote)
                          throws IOException

Открывает сокет-канал и подключает его к удалённому адресу.

Этот удобный метод работает как если бы он вызывал метод open(), вызывал метод connect для полученного сокет-канала, передавая ему remote, а затем возвращал этот канал.

Параметры:
remote - Удалённый адрес, к которому должен быть подключён новый канал
Возвращает:
Новый подключённый сокет-канал
Исключение:
AsynchronousCloseException - Если другой поток закрывает этот канал во время выполнения операции подключения
ClosedByInterruptException - Если другой поток прерывает текущий поток во время выполнения операции подключения, тем самым закрывая канал и устанавливая статус прерывания текущего потока
UnresolvedAddressException - Если заданный удалённый адрес не полностью разрешен
UnsupportedAddressTypeException - Если тип заданного удалённого адреса не поддерживается
SecurityException - Если установлен менеджер безопасности и он не разрешает доступ к заданному удалённому узлу
IOException - Если произошла какая-либо другая ошибка ввода-вывода

validOps

public final int validOps()

Возвращает набор операций, поддерживаемых этим каналом.

Сокет-каналы поддерживают подключение, чтение и запись, поэтому этот метод возвращает (SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE).

Установлено в:
validOps в классе SelectableChannel
Возвращает:
Набор допустимых операций

bind

public abstract SocketChannel bind(SocketAddress local)
                            throws IOException

Описание скопировано из интерфейса: NetworkChannel

Связывает сокет канала с локальным адресом.

Этот метод используется для установления связи между сокетом и локальным адресом. После установления связи сокет остаётся связанным до закрытия канала. Если параметр local имеет значение null, сокет будет связан с автоматически назначаемым адресом.

Установлено в:
bind в интерфейсе NetworkChannel
Параметры:
local - Адрес для связывания сокета, или null для связывания сокета с автоматически назначенным адресом сокета
Возвращает:
Этот канал
Исключение:
ConnectionPendingException - Если уже выполняется неблокирующая операция подключения к этому каналу
AlreadyBoundException - Если сокет уже связан
UnsupportedAddressTypeException - Если тип заданного адреса не поддерживается
ClosedChannelException - Если канал закрыт
IOException - Если произошла какая-либо другая ошибка ввода-вывода
SecurityException - Если установлен менеджер безопасности и его метод checkListen отклоняет операцию
С:
1.7
См. также:
NetworkChannel.getLocalAddress()

setOption

public abstract <T> SocketChannel setOption(SocketOption<T> name,
                                            T value)
                                     throws IOException

Описание скопировано из интерфейса: NetworkChannel

Устанавливает значение параметра сокета.

Установлено в:
setOption в интерфейсе NetworkChannel
Параметры типа:
T - Тип значения параметра сокета
Параметры:
name - Параметр сокета
value - Значение параметра сокета. Значение null может быть допустимым значением для некоторых параметров сокета.
Возвращает:
Этот канал
Исключение:
UnsupportedOperationException - Если параметр сокета не поддерживается этим каналом
IllegalArgumentException - Если значение не является допустимым значением для этого параметра сокета
ClosedChannelException - Если этот канал закрыт
IOException - Если произошла ошибка ввода-вывода
С:
1.7
См. также:
StandardSocketOptions

shutdownInput

public abstract SocketChannel shutdownInput()
                                     throws IOException

Закрывает подключение для чтения без закрытия канала.

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

Возвращает:
Канал
Исключение:
NotYetConnectedException - Если этот канал ещё не подключён
ClosedChannelException - Если этот канал закрыт
IOException - Если произошла какая-либо другая ошибка ввода-вывода
С:
1.7

shutdownOutput

public abstract SocketChannel shutdownOutput()
                                      throws IOException

Закрывает подключение для записи без закрытия канала.

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

Возвращает:
Канал
Исключение:
NotYetConnectedException - Если этот канал ещё не подключён
ClosedChannelException - Если этот канал закрыт
IOException - Если произошла какая-либо другая ошибка ввода-вывода
С:
1.7

socket

public abstract Socket socket()

Возвращает сокет, связанный с этим каналом.

Возвращаемый объект не будет объявлять никаких публичных методов, которые не объявлены в классе Socket.

Возвращает:
Сокет, связанный с этим каналом

isConnected

public abstract boolean isConnected()

Указывает, подключен ли сокет сети этого канала.

Возвращает:
true если, и только если, сокет сети этого канала open и подключен

isConnectionPending

public abstract boolean isConnectionPending()

Указывает, происходит ли операция подключения к этому каналу.

Возвращает:
true если, и только если, операция подключения была инициирована на этом канале, но ещё не завершена вызовом метода finishConnect

connect

public abstract boolean connect(SocketAddress remote)
                         throws IOException

Подключает сокет этого канала.

Если этот канал находится в режиме без блокировки, вызов этого метода инициирует операцию неблокирующего подключения. Если подключение установлено немедленно, как может произойти с локальным подключением, этот метод возвращает true. В противном случае этот метод возвращает false, и операция подключения должна быть завершена позже вызовом метода finishConnect.

Если этот канал находится в режиме блокировки, вызов этого метода будет блокировать до тех пор, пока подключение не будет установлено или не произойдёт ошибка ввода-вывода.

Этот метод выполняет точно те же проверки безопасности, что и класс Socket. То есть, если установлен менеджер безопасности, этот метод проверяет, позволяет ли его метод checkConnect подключение к адресу и номеру порта заданного удалённого узла.

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

Параметры:
remote - Удалённый адрес, к которому должен быть подключен этот канал
Возвращает:
true если подключение было установлено, false если этот канал находится в режиме без блокировки, и операция подключения выполняется
Исключение:
AlreadyConnectedException - Если этот канал уже подключен
ConnectionPendingException - Если уже выполняется неблокирующая операция подключения к этому каналу
ClosedChannelException - Если этот канал закрыт
AsynchronousCloseException - Если другой поток закрывает этот канал во время выполнения операции подключения
ClosedByInterruptException - Если другой поток прерывает текущий поток во время выполнения операции подключения, тем самым закрывая канал и устанавливая статус прерывания текущего потока
UnresolvedAddressException - Если заданный удалённый адрес не полностью разрешен
UnsupportedAddressTypeException - Если тип заданного удалённого адреса не поддерживается
SecurityException - Если установлен менеджер безопасности и он не разрешает доступ к заданному удалённому узлу
IOException - Если произошла какая-либо другая ошибка ввода-вывода

finishConnect

public abstract boolean finishConnect()
                               throws IOException

Завершает процесс подключения канала сокета.

Операция подключения без блокировки инициируется путем перевода канала сокета в режим без блокировки, а затем вызова его метода connect. После установления соединения или неудачи попытки канал сокета становится соединяемым, и этот метод может быть вызван для завершения последовательности подключения. Если операция подключения завершилась неудачей, вызов этого метода приведет к соответствующей ошибке IOException.

Если этот канал уже подключен, то этот метод не будет блокировать и сразу вернет true. Если этот канал находится в режиме без блокировки, то этот метод вернет false если процесс подключения еще не завершен. Если этот канал находится в режиме блокировки, то этот метод будет блокироваться до тех пор, пока подключение не завершится или не завершится с ошибкой, и всегда вернет true или выбросит проверенное исключение, описывающее причину ошибки.

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

Возвращает:
true только если сокет этого канала теперь подключен
Исключения:
NoConnectionPendingException - Если этот канал не подключен и операция подключения не была инициирована
ClosedChannelException - Если канал закрыт
AsynchronousCloseException - Если другой поток закрывает этот канал во время выполнения операции подключения
ClosedByInterruptException - Если другой поток прерывает текущий поток во время выполнения операции подключения, тем самым закрывая канал и устанавливая статус прерывания текущего потока
IOException - Если произошла другая ошибка ввода-вывода

getRemoteAddress

public abstract SocketAddress getRemoteAddress()
                                        throws IOException

Возвращает удаленный адрес, к которому подключен сокет этого канала.

Если канал привязан и подключен к адресу сокета протокола Интернета, то значение, возвращаемое этим методом, имеет тип InetSocketAddress.

Возвращает:
Удаленный адрес; null если сокет канала не подключен
Исключения:
ClosedChannelException - Если канал закрыт
IOException - Если произошла ошибка ввода-вывода
С:
1.7

read

public abstract int read(ByteBuffer dst)
                  throws IOException

Описание скопировано из интерфейса: ReadableByteChannel

Считывает последовательность байтов из этого канала в заданный буфер.

Делается попытка считать до r байтов из канала, где r — количество байтов, оставшихся в буфере, то есть dst.remaining(), в момент вызова этого метода.

Предположим, что последовательность байтов длиной n считывается, где 0 <= n <= r. Эта последовательность байтов будет передана в буфер таким образом, что первый байт в последовательности находится по индексу p, а последний байт — по индексу p + n - 1, где p — позиция буфера в момент вызова этого метода. По возвращении позиция буфера будет равна p + n; его предел не изменится.

Операция чтения может не заполнить буфер, и, на самом деле, она может вообще не прочитать ни одного байта. Будет ли это сделано, зависит от типа и состояния канала. Например, канал сокета в режиме без блокировки не может прочитать больше байтов, чем сразу доступно из буфера ввода сокета; аналогично, файл-канал не может прочитать больше байтов, чем осталось в файле. Однако гарантируется, что если канал находится в режиме блокировки, и в буфере осталось как минимум один байт, то этот метод заблокируется до тех пор, пока не будет прочитан как минимум один байт.

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

Унаследован от:
read в интерфейсе ReadableByteChannel
Параметры:
dst - Буфер, в который будут переданы байты
Возвращает:
Количество прочитанных байтов, возможно ноль, или -1 если канал достиг конца потока
Исключения:
NotYetConnectedException - Если этот канал еще не подключен
ClosedChannelException - Если канал закрыт
AsynchronousCloseException - Если другой поток закрывает этот канал во время выполнения операции чтения
ClosedByInterruptException - Если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая статус прерывания текущего потока
IOException - Если произошла другая ошибка ввода-вывода

read

public abstract long read(ByteBuffer[] dsts,
                          int offset,
                          int length)
                   throws IOException

Описание скопировано из интерфейса: ScatteringByteChannel

Считывает последовательность байтов из этого канала в подпоследовательность заданных буферов.

Вызов этого метода пытается прочитать до r байтов из этого канала, где r — общее количество байтов, оставшихся в заданной подпоследовательности массива буферов, то есть

dsts[offset].remaining()
    + dsts[offset+1].remaining()
    + ... + dsts[offset+length-1].remaining()
в момент вызова этого метода.

Предположим, что последовательность байтов длиной n считывается, где 0 <= n <= r. До первых dsts[offset].remaining() байтов этой последовательности передаются в буфер dsts[offset], до следующих dsts[offset+1].remaining() байтов передаются в буфер dsts[offset+1], и так далее, пока вся последовательность байтов не будет передана в заданные буферы. Максимальное количество байтов передается в каждый буфер, поэтому конечная позиция каждого обновленного буфера, кроме последнего обновленного буфера, гарантированно будет равна пределу этого буфера.

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

Унаследован от:
read в интерфейсе ScatteringByteChannel
Параметры:
dsts - Буферы, в которые будут переданы байты
offset - Смещение в массиве буферов первого буфера, в который будут переданы байты; должно быть неотрицательным и не больше dsts.length
length - Максимальное количество буферов для доступа; должно быть неотрицательным и не больше dsts.length - offset
Возвращает:
Количество прочитанных байтов, возможно ноль, или -1 если канал достиг конца потока
Исключения:
NotYetConnectedException - Если этот канал еще не подключен
ClosedChannelException - Если канал закрыт
AsynchronousCloseException - Если другой поток закрывает этот канал во время выполнения операции чтения
ClosedByInterruptException - Если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая статус прерывания текущего потока
IOException - Если произошла другая ошибка ввода-вывода

read

public final long read(ByteBuffer[] dsts)
                throws IOException

Описание скопировано из интерфейса: ScatteringByteChannel

Считывает последовательность байтов из этого канала в заданные буферы.

Вызов этого метода в формате c.read(dsts) ведет себя точно так же, как вызов

c.read(dsts, 0, dsts.length);
Унаследован от:
read в интерфейсе ScatteringByteChannel
Параметры:
dsts - Буферы, в которые будут переданы байты
Возвращает:
Количество прочитанных байтов, возможно ноль, или -1 если канал достиг конца потока
Исключения:
NotYetConnectedException - Если этот канал еще не подключен
ClosedChannelException - Если канал закрыт
AsynchronousCloseException - Если другой поток закрывает этот канал во время выполнения операции чтения
ClosedByInterruptException - Если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая статус прерывания текущего потока
IOException - Если произошла другая ошибка ввода-вывода

write

public abstract int write(ByteBuffer src)
                   throws IOException

Описание скопировано из интерфейса: WritableByteChannel

Записывает последовательность байтов в этот канал из заданного буфера.

Делается попытка записать до r байтов в канал, где r — количество байтов, оставшихся в буфере, то есть src.remaining(), в момент вызова этого метода.

Предположим, что последовательность байтов длиной n записывается, где 0 <= n <= r. Эта последовательность байтов будет передана из буфера, начиная с индекса p, где p — позиция буфера в момент вызова этого метода; индекс последнего записанного байта будет равен p + n - 1. По возвращении позиция буфера будет равна p + n; его предел не изменится.

Если не указано иное, операция записи вернется только после записи всех r запрошенных байтов. Некоторые типы каналов, в зависимости от их состояния, могут записать только некоторые байты или, возможно, вообще не записать ни одного. Например, канал сокета в режиме без блокировки не может записать больше байтов, чем свободно в буфере вывода сокета.

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

Определено:
write в интерфейсе WritableByteChannel
Параметры:
src - Буфер, из которого должны быть извлечены байты
Возвращает:
Количество записанных байтов, возможно ноль
Изводит исключение:
NotYetConnectedException - Если канал ещё не подключён
ClosedChannelException - Если канал закрыт
AsynchronousCloseException - Если другой поток закрывает этот канал во время операции записи
ClosedByInterruptException - Если другой поток прерывает текущий поток во время операции записи, тем самым закрывая канал и устанавливая статус прерывания текущего потока
IOException - Если произошла другая ошибка ввода-вывода

write

public abstract long write(ByteBuffer[] srcs,
                           int offset,
                           int length)
                    throws IOException

Описание скопировано из интерфейса: GatheringByteChannel

Записывает последовательность байтов в этот канал из подпоследовательности заданных буферов.

Делается попытка записать до r байтов в этот канал, где r — общее количество байтов, оставшихся в указанной подпоследовательности заданного массива буферов, то есть,

srcs[offset].remaining()
    + srcs[offset+1].remaining()
    + ... + srcs[offset+length-1].remaining()
в момент вызова этого метода.

Предположим, что записана последовательность байтов длиной n, где 0 <= n <= r. До первых srcs[offset].remaining() байтов этой последовательности записываются из буфера srcs[offset], до следующих srcs[offset+1].remaining() байтов записываются из буфера srcs[offset+1], и так далее, пока вся последовательность байтов не будет записана. Из каждого буфера записывается как можно больше байтов, поэтому конечная позиция каждого обновленного буфера, кроме последнего обновленного буфера, гарантированно равна пределу этого буфера.

Если не указано иное, операция записи вернётся только после записи всех r запрошенных байтов. Некоторые типы каналов в зависимости от их состояния могут записать только часть байтов или, возможно, вообще не записать ни одного. Например, сокет-канал в режиме без блокировки не может записать больше байтов, чем свободно в буфере вывода сокета.

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

Определено:
write в интерфейсе GatheringByteChannel
Параметры:
srcs - Буферы, из которых должны быть извлечены байты
offset - Смещение в массиве буферов первого буфера, из которого должны быть извлечены байты; должно быть неотрицательным и не больше srcs.length
length - Максимальное количество буферов для доступа; должно быть неотрицательным и не больше srcs.length - offset
Возвращает:
Количество записанных байтов, возможно ноль
Изводит исключение:
NotYetConnectedException - Если канал ещё не подключён
ClosedChannelException - Если канал закрыт
AsynchronousCloseException - Если другой поток закрывает этот канал во время операции записи
ClosedByInterruptException - Если другой поток прерывает текущий поток во время операции записи, тем самым закрывая канал и устанавливая статус прерывания текущего потока
IOException - Если произошла другая ошибка ввода-вывода

write

public final long write(ByteBuffer[] srcs)
                 throws IOException

Описание скопировано из интерфейса: GatheringByteChannel

Записывает последовательность байтов в этот канал из заданных буферов.

Вызов этого метода в форме c.write(srcs) ведет себя точно так же, как вызов

c.write(srcs, 0, srcs.length);
Определено:
write в интерфейсе GatheringByteChannel
Параметры:
srcs - Буферы, из которых должны быть извлечены байты
Возвращает:
Количество записанных байтов, возможно ноль
Изводит исключение:
NotYetConnectedException - Если канал ещё не подключён
ClosedChannelException - Если канал закрыт
AsynchronousCloseException - Если другой поток закрывает этот канал во время операции записи
ClosedByInterruptException - Если другой поток прерывает текущий поток во время операции записи, тем самым закрывая канал и устанавливая статус прерывания текущего потока
IOException - Если произошла другая ошибка ввода-вывода

getLocalAddress

public abstract SocketAddress getLocalAddress()
                                       throws IOException

Возвращает адрес сокета, к которому привязан сокет этого канала.

Если канал bound к адресу сокета Интернет-протокола, то возвращаемое значение этого метода является типа checkConnect.

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

Определено:
getLocalAddress в интерфейсе NetworkChannel
Возвращает:
Адрес SocketAddress, к которому привязан сокет, или SocketAddress , представляющий адрес обратной связи, если это запрещено менеджером безопасности, или null , если сокет канала не привязан
Изводит исключение:
ClosedChannelException - Если канал закрыт
IOException - Если произошла ошибка ввода-вывода

© 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/nio/channels/SocketChannel.html

Spec-Zone .ru
спецификации, руководства, описания, API