Класс SctpChannel
- Все реализованные интерфейсы:
Closeable, AutoCloseable, Channel, InterruptibleChannel
public abstract class SctpChannel extends AbstractSelectableChannel
Канал SCTP может управлять только одной SCTP-ассоциацией. SCTPChannel создается вызовом одного из методов open этого класса. Созданный канал открыт, но еще не подключен, то есть ассоциация с удаленным узлом не установлена. Попытка выполнить операцию ввода-вывода на неподключенном канале приведет к выбросу исключения NotYetConnectedException. Ассоциацию можно установить, подключив канал с помощью одного из его методов connect. После подключения канал остается подключенным, пока не будет закрыт. Определить, подключен ли канал, можно вызовом метода getRemoteAddresses.
Каналы SCTP поддерживают неблокирующее подключение: можно создать канал и начать установление соединения с удаленным сокетом с помощью метода connect, а позднее завершить его методом finishConnect. Определить, выполняется ли в данный момент операция подключения, можно вызовом метода isConnectionPending.
Параметры сокета настраиваются с помощью метода setOption. Канал SCTP поддерживает следующие параметры:
Также могут поддерживаться дополнительные параметры, зависящие от реализации. Список поддерживаемых параметров можно получить вызовом метода
Имя параметра Описание SCTP_DISABLE_FRAGMENTSВключает или отключает фрагментацию сообщений SCTP_EXPLICIT_COMPLETEВключает или отключает явное завершение сообщений SCTP_FRAGMENT_INTERLEAVEУправляет порядком представления сообщений получателю SCTP_INIT_MAXSTREAMSМаксимальное число потоков, запрашиваемое локальной конечной точкой при инициализации ассоциации SCTP_NODELAYВключает или отключает алгоритм, аналогичный алгоритму Нагла SCTP_PRIMARY_ADDRЗапрашивает использование локальным стеком SCTP указанного адреса узла-партнера в качестве основного адреса ассоциации SCTP_SET_PEER_PRIMARY_ADDRЗапрашивает, чтобы узел-партнер назначил указанный адрес основным адресом ассоциации SO_SNDBUFРазмер буфера отправки сокета SO_RCVBUFРазмер буфера приема сокета SO_LINGERОжидание при закрытии, если имеются данные (только при настройке блокирующего режима)
supportedOptions. Каналы SCTP безопасны для использования несколькими потоками одновременно. Они поддерживают параллельное чтение и запись, однако в каждый момент времени читать может не более одного потока, и записывать — также не более одного. Методы connect и finishConnect синхронизированы относительно друг друга; попытка начать операцию отправки или приема во время выполнения одного из этих методов будет заблокирована до его завершения.
- Начиная с:
- 1.7
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Создает новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract Association |
association() |
Возвращает ассоциацию для сокета этого канала. |
abstract SctpChannel |
bind |
Привязывает сокет канала к локальному адресу. |
abstract SctpChannel |
bindAddress |
Добавляет указанный адрес к связанным адресам сокета канала. |
abstract boolean |
connect |
Подключает сокет этого канала. |
abstract boolean |
connect |
Подключает сокет этого канала. |
abstract boolean |
finishConnect() |
Завершает процесс подключения канала SCTP. |
abstract Set |
getAllLocalAddresses() |
Возвращает все адреса сокетов, к которым привязан сокет этого канала. |
abstract <T> T |
getOption |
Возвращает значение параметра сокета. |
abstract Set |
getRemoteAddresses() |
Возвращает все удаленные адреса, к которым подключен сокет этого канала. |
abstract boolean |
isConnectionPending() |
Сообщает, выполняется ли на этом канале операция подключения. |
static SctpChannel |
open() |
Открывает канал SCTP. |
static SctpChannel |
open |
Открывает канал SCTP и подключает его к удаленному адресу. |
abstract <T> MessageInfo |
receive |
Принимает сообщение в указанный буфер и/или обрабатывает уведомление. |
abstract int |
send |
Отправляет сообщение через этот канал. |
abstract <T> SctpChannel |
setOption |
Задает значение параметра сокета. |
abstract SctpChannel |
shutdown() |
Завершает соединение, не закрывая канал. |
abstract Set |
supportedOptions() |
Возвращает набор параметров сокета, поддерживаемых этим каналом. |
abstract SctpChannel |
unbindAddress |
Удаляет указанный адрес из связанных адресов сокета канала. |
final int |
validOps() |
Возвращает набор операций, поддерживаемых этим каналом. |
Методы, объявленные в классе AbstractSelectableChannel
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register | Модификатор и тип | Метод | Описание |
|---|---|---|
final Object |
blockingLock() |
Возвращает объект, используемый для синхронизации методов configureBlocking и register. |
final SelectableChannel |
configureBlocking |
Изменяет режим блокировки этого канала. |
protected final void |
implCloseChannel() |
Закрывает этот канал. |
protected abstract void |
implCloseSelectableChannel() |
Закрывает этот выбираемый канал. |
protected abstract void |
implConfigureBlocking |
Изменяет режим блокировки этого канала. |
final boolean |
isBlocking() |
Сообщает, блокируется ли каждая операция ввода-вывода на этом канале до ее завершения. |
final boolean |
isRegistered() |
Сообщает, зарегистрирован ли этот канал в данный момент хотя бы в одном селекторе. |
final SelectionKey |
keyFor |
Получает ключ, представляющий регистрацию канала в указанном селекторе. |
final SelectorProvider |
provider() |
Возвращает провайдер, создавший этот канал. |
final SelectionKey |
register |
Регистрирует этот канал в указанном селекторе и возвращает ключ выбора. |
Методы, объявленные в классе SelectableChannel
register | Модификатор и тип | Метод | Описание |
|---|---|---|
final SelectionKey |
register |
Регистрирует этот канал в указанном селекторе и возвращает ключ выбора. |
Методы, объявленные в классе AbstractInterruptibleChannel
begin, close, end, isOpen | Модификатор и тип | Метод | Описание |
|---|---|---|
protected final void |
begin() |
Отмечает начало операции ввода-вывода, которая может блокироваться неопределенно долго. |
final void |
close() |
Закрывает этот канал. |
protected final void |
end |
Отмечает окончание операции ввода-вывода, которая может блокироваться неопределенно долго. |
final boolean |
isOpen() |
Сообщает, открыт ли этот канал. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Показывает, равен ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удален в будущей версии. Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
Подробное описание конструкторов
SctpChannel
protected SctpChannel(SelectorProvider provider)
- Параметры:
-
provider— поставщик селекторов для этого канала
Подробное описание методов
open
public static SctpChannel open() throws IOException
Новый канал не привязан и не подключён.
- Возвращает:
- Новый канал SCTP
- Выбрасывает:
-
UnsupportedOperationException— если протокол SCTP не поддерживается -
IOException— если произошла ошибка ввода-вывода
open
public static SctpChannel open(SocketAddress remote, int maxOutStreams, int maxInStreams) throws IOException
Это вспомогательный метод, эквивалентный вычислению следующего выражения:
open().connect(remote, maxOutStreams, maxInStreams);
- Параметры:
-
remote— удалённый адрес, к которому будет подключён новый канал -
maxOutStreams— количество потоков, в которые приложение должно иметь возможность отправлять данные. Значение должно быть неотрицательным и не превышать65536.0, чтобы использовать значение по умолчанию для конечной точки. -
maxInStreams— максимальное количество входящих потоков, которое приложение готово поддерживать. Значение должно быть неотрицательным и не превышать65536.0, чтобы использовать значение по умолчанию для конечной точки. - Возвращает:
- Новый канал SCTP, подключённый к указанному адресу
- Выбрасывает:
-
AsynchronousCloseException— если другой поток закрывает этот канал во время выполнения операции подключения -
ClosedByInterruptException— если другой поток прерывает текущий поток во время выполнения операции подключения, тем самым закрывая канал и устанавливая для текущего потока статус прерывания -
UnresolvedAddressException— если указанный удалённый адрес разрешён не полностью -
UnsupportedAddressTypeException— если тип указанного удалённого адреса не поддерживается -
UnsupportedOperationException— если протокол SCTP не поддерживается -
IOException— если произошла другая ошибка ввода-вывода
association
public abstract Association association() throws IOException
- Возвращает:
- ассоциацию или
null, если сокет канала не подключён. - Выбрасывает:
-
ClosedChannelException— если канал закрыт -
IOException— если произошла другая ошибка ввода-вывода
bind
public abstract SctpChannel bind(SocketAddress local) throws IOException
Этот метод устанавливает связь между сокетом и локальными адресами. После установления связи сокет остаётся привязанным до закрытия канала. Эта связь не обязательно должна сохраняться с адресом local, поскольку он может быть удалён с помощью unbindAddress, однако после успешного завершения вызова этого метода к сокету канала всегда будет привязан как минимум один локальный адрес.
После успешной привязки сокета канала к определённому адресу, который не назначается автоматически, к нему можно привязать дополнительные адреса с помощью bindAddress или удалить их с помощью unbindAddress.
- Параметры:
-
local— локальный адрес для привязки сокета илиnull, чтобы привязать сокет к автоматически назначенному адресу сокета - Возвращает:
- Этот канал
- Выбрасывает:
-
AlreadyConnectedException— если этот канал уже подключён -
ClosedChannelException— если этот канал закрыт -
ConnectionPendingException— если на этом канале уже выполняется неблокирующая операция подключения -
AlreadyBoundException— если этот канал уже привязан -
UnsupportedAddressTypeException— если тип указанного адреса не поддерживается -
IOException— если произошла другая ошибка ввода-вывода
bindAddress
public abstract SctpChannel bindAddress(InetAddress address) throws IOException
Указанный адрес не должен быть адресом wildcard. Перед вызовом этого метода канал необходимо привязать с помощью bind, иначе будет выброшено исключение NotYetBoundException. Метод bind принимает аргумент типа SocketAddress, который обычно содержит как номер порта, так и адрес. Адреса, привязанные впоследствии с помощью этого метода, являются просто адресами, поскольку номер порта SCTP остаётся неизменным на протяжении всего времени существования канала.
Добавление адресов к подключённой ассоциации является необязательной функцией. Если конечная точка поддерживает динамическую перенастройку адресов, она может отправить соответствующее сообщение узлу-партнёру для изменения списков адресов узла-партнёра.
- Параметры:
-
address— адрес, добавляемый к привязанным адресам сокета - Возвращает:
- Этот канал
- Выбрасывает:
-
ClosedChannelException— если этот канал закрыт -
ConnectionPendingException— если на этом канале уже выполняется неблокирующая операция подключения -
NotYetBoundException— если этот канал ещё не привязан -
AlreadyBoundException— если этот канал уже привязан к указанному адресу -
IllegalArgumentException— если адрес равенnullили является адресомwildcard -
IOException— если произошла другая ошибка ввода-вывода
unbindAddress
public abstract SctpChannel unbindAddress(InetAddress address) throws IOException
Указанный адрес не должен быть адресом wildcard. Перед вызовом этого метода канал необходимо привязать с помощью bind, иначе будет выброшено исключение NotYetBoundException. Если этот метод вызван для канала, у которого address не является одним из привязанных адресов или к которому привязан только один локальный адрес, метод выбрасывает исключение IllegalUnbindException. Исходный адрес, к которому сокет канала привязан с помощью bind, можно удалить из числа привязанных адресов сокета канала.
Удаление адресов из подключённой ассоциации является необязательной функцией. Если конечная точка поддерживает динамическую перенастройку адресов, она может отправить соответствующее сообщение узлу-партнёру для изменения списков адресов узла-партнёра.
- Параметры:
-
address— адрес, удаляемый из привязанных адресов сокета - Возвращает:
- Этот канал
- Выбрасывает:
-
ClosedChannelException— если этот канал закрыт -
ConnectionPendingException— если на этом канале уже выполняется неблокирующая операция подключения -
NotYetBoundException— если этот канал ещё не привязан -
IllegalArgumentException— если адрес равенnullили является адресомwildcard -
IllegalUnbindException— еслиaddressне привязан к сокету канала или если к каналу привязан только один адрес -
IOException— если произошла другая ошибка ввода-вывода
connect
public abstract boolean connect(SocketAddress remote) throws IOException
Если этот канал работает в неблокирующем режиме, вызов этого метода инициирует неблокирующую операцию подключения. Если подключение устанавливается немедленно, как это может произойти при локальном подключении, метод возвращает true. В противном случае метод возвращает false, и операцию подключения необходимо позднее завершить вызовом метода finishConnect.
Если этот канал работает в блокирующем режиме, вызов этого метода блокирует выполнение до установления подключения или возникновения ошибки ввода-вывода.
Этот метод можно вызвать в любое время. Если во время выполнения этого метода вызывается операция send или receive для этого канала, эта операция сначала блокируется до завершения текущего вызова. Если попытка подключения инициирована, но завершается неудачно, то есть вызов этого метода выбрасывает проверяемое исключение, канал будет закрыт.
- Параметры:
-
remote— удалённый узел, к которому нужно подключить этот канал - Возвращает:
-
true, если подключение установлено;false, если этот канал работает в неблокирующем режиме и операция подключения выполняется - Выбрасывает:
-
AlreadyConnectedException— если этот канал уже подключён -
ConnectionPendingException— если на этом канале уже выполняется неблокирующая операция подключения -
ClosedChannelException— если этот канал закрыт -
AsynchronousCloseException— если другой поток закрывает этот канал во время выполнения операции подключения -
ClosedByInterruptException— если другой поток прерывает текущий поток во время выполнения операции подключения, тем самым закрывая канал и устанавливая для текущего потока статус прерывания -
UnresolvedAddressException— если указанный удалённый адрес разрешён не полностью -
UnsupportedAddressTypeException— если тип указанного удалённого адреса не поддерживается -
IOException— если произошла другая ошибка ввода-вывода
connect
public abstract boolean connect(SocketAddress remote, int maxOutStreams, int maxInStreams) throws IOException
Это вспомогательный метод, эквивалентный вычислению следующего выражения:
setOption(SctpStandardSocketOptions.SCTP_INIT_MAXSTREAMS, SctpStandardSocketOption.InitMaxStreams.create(maxInStreams, maxOutStreams)) .connect(remote);
Параметры maxOutStreams и maxInStreams задают максимальное количество потоков, в которые приложение должно иметь возможность отправлять данные и из которых оно должно иметь возможность получать данные. Эти значения согласуются с удалённым узлом и могут быть ограничены операционной системой.
- Параметры:
-
remote— удалённый узел, к которому нужно подключить этот канал -
maxOutStreams— значение должно быть неотрицательным и не превышать65536.0, чтобы использовать значение по умолчанию для конечной точки. -
maxInStreams— значение должно быть неотрицательным и не превышать65536.0, чтобы использовать значение по умолчанию для конечной точки. - Возвращает:
-
true, если подключение установлено;false, если этот канал работает в неблокирующем режиме и операция подключения выполняется - Выбрасывает:
-
AlreadyConnectedException— если этот канал уже подключён -
ConnectionPendingException— если на этом канале уже выполняется неблокирующая операция подключения -
ClosedChannelException— если этот канал закрыт -
AsynchronousCloseException— если другой поток закрывает этот канал во время выполнения операции подключения -
ClosedByInterruptException— если другой поток прерывает текущий поток во время выполнения операции подключения, тем самым закрывая канал и устанавливая для текущего потока статус прерывания -
UnresolvedAddressException— если указанный удалённый адрес разрешён не полностью -
UnsupportedAddressTypeException— если тип указанного удалённого адреса не поддерживается -
IOException— если произошла другая ошибка ввода-вывода
isConnectionPending
public abstract boolean isConnectionPending()
- Возвращает:
-
trueтогда и только тогда, когда на этом канале была инициирована операция подключения, но она ещё не завершена вызовом методаfinishConnect()
finishConnect
public abstract boolean finishConnect() throws IOException
Неблокирующая операция подключения инициируется переводом канала сокета в неблокирующий режим с последующим вызовом одного из его методов connect. После установления подключения или неудачной попытки канал становится готовым к подключению, и этот метод можно вызвать для завершения процедуры подключения. Если операция подключения завершилась неудачно, вызов этого метода приведёт к выбрасыванию соответствующего исключения IOException.
Если этот канал уже подключён, метод не будет блокировать выполнение и немедленно вернёт true. Если этот канал работает в неблокирующем режиме, метод вернёт false, если процесс подключения ещё не завершён. Если этот канал работает в блокирующем режиме, метод будет блокировать выполнение до завершения или сбоя подключения и всегда либо вернёт true, либо выбросит проверяемое исключение с описанием ошибки.
Этот метод можно вызвать в любое время. Если во время выполнения этого метода вызывается операция send или receive для этого канала, эта операция сначала блокируется до завершения текущего вызова. Если попытка подключения завершается неудачно, то есть вызов этого метода выбрасывает проверяемое исключение, канал будет закрыт.
- Возвращает:
-
trueтогда и только тогда, когда сокет этого канала теперь подключён - Выбрасывает:
-
NoConnectionPendingException— если этот канал не подключён и операция подключения не была инициирована -
ClosedChannelException— если этот канал закрыт -
AsynchronousCloseException— если другой поток закрывает этот канал во время выполнения операции подключения -
ClosedByInterruptException— если другой поток прерывает текущий поток во время выполнения операции подключения, тем самым закрывая канал и устанавливая для текущего потока статус прерывания -
IOException— если произошла другая ошибка ввода-вывода
getAllLocalAddresses
public abstract Set<SocketAddress> getAllLocalAddresses() throws IOException
- Возвращает:
- Все адреса сокетов, к которым привязан сокет этого канала, или пустой
Set, если сокет канала не привязан - Выбрасывает:
-
ClosedChannelException— если канал закрыт -
IOException— если произошла ошибка ввода-вывода
getRemoteAddresses
public abstract Set<SocketAddress> getRemoteAddresses() throws IOException
Если канал подключён к удалённому узлу, привязанному к нескольким адресам, сокет канала подключён именно к этим адресам.
- Возвращает:
- Все удалённые адреса, к которым подключён сокет этого канала, или пустой
Set, если сокет канала не подключён - Выбрасывает:
-
ClosedChannelException— если канал закрыт -
IOException— если произошла ошибка ввода-вывода
shutdown
public abstract SctpChannel shutdown() throws IOException
Отправляет удалённому узлу команду завершения работы, фактически запрещая обоим узлам записывать новые данные в сокет. При последующих попытках отправки будет выброшено исключение ClosedChannelException. Канал остаётся открытым, чтобы можно было получить данные (и уведомления), отправленные узлом-партнёром до получения им команды завершения работы. Если канал уже отключён, вызов этого метода не оказывает никакого эффекта.
- Возвращает:
- Этот канал
- Выбрасывает:
-
NotYetConnectedException— если этот канал ещё не подключён -
ClosedChannelException— если этот канал закрыт -
IOException— если произошла другая ошибка ввода-вывода
getOption
public abstract <T> T getOption(SctpSocketOption<T> name) throws IOException
- Параметры типа:
T— тип значения параметра сокета- Параметры:
-
name— параметр сокета - Возвращает:
- Значение параметра сокета. Для некоторых параметров сокета допустимым значением может быть
null. - Выбрасывает:
-
UnsupportedOperationException— если этот канал не поддерживает параметр сокета -
ClosedChannelException— если этот канал закрыт -
IOException— если произошла ошибка ввода-вывода - См. также:
setOption
public abstract <T> SctpChannel setOption(SctpSocketOption<T> name, T value) throws IOException
- Параметры типа:
T— тип значения параметра сокета- Параметры:
-
name— параметр сокета -
value— значение параметра сокета. Для некоторых параметров сокета допустимым значением может бытьnull. - Возвращает:
- Этот канал
- Выбрасывает:
-
UnsupportedOperationException— если этот канал не поддерживает параметр сокета -
IllegalArgumentException— если значение недопустимо для этого параметра сокета -
ClosedChannelException— если этот канал закрыт -
IOException— если произошла ошибка ввода-вывода - См. также:
supportedOptions
public abstract Set<SctpSocketOption<?>> supportedOptions()
Этот метод продолжает возвращать набор параметров даже после закрытия канала.
- Возвращает:
- Набор параметров сокета, поддерживаемых этим каналом
validOps
public final int validOps()
Каналы SCTP поддерживают подключение, чтение и запись, поэтому этот метод возвращает (SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE).
- Указано в:
-
validOpsв классеSelectableChannel - Возвращает:
- Набор допустимых операций
receive
public abstract <T> MessageInfo receive(ByteBuffer dst, T attachment, NotificationHandler<T> handler) throws IOException
Если сообщение или уведомление доступно немедленно либо если этот канал работает в блокирующем режиме и сообщение или уведомление становится доступным позднее, сообщение возвращается, а уведомление обрабатывается соответственно. Если этот канал работает в неблокирующем режиме и сообщение или уведомление недоступно немедленно, метод сразу возвращает null.
Если этот метод получает сообщение, оно копируется в указанный байтовый буфер. Сообщение помещается в указанный байтовый буфер начиная с его текущей позиции, а позиция буфера увеличивается на количество прочитанных байтов. Если в буфере осталось меньше места, чем требуется для размещения сообщения, или базовый входной буфер не содержит сообщение целиком, вызов метода isComplete для возвращённого объекта
MessageInfo вернёт false, и для полного получения сообщения потребуется вызвать этот метод ещё несколько раз. В каждом потоке одновременно может быть частично передано только одно сообщение. Параметр сокета SCTP_FRAGMENT_INTERLEAVE управляет различными аспектами чередования сообщений.
Если этот метод получает уведомление, вызывается соответствующий метод указанного обработчика, если он задан. Если обработчик возвращает CONTINUE, метод пытается получить ещё одно сообщение или уведомление; в противном случае, если возвращено RETURN, метод возвращает
null. Неперехваченное исключение, выброшенное обработчиком, передаётся вверх по стеку вызовов через этот метод.
Этот метод можно вызвать в любое время. Если другой поток уже инициировал операцию получения данных для этого канала, вызов этого метода будет заблокирован до завершения первой операции. Указанный обработчик вызывается без захвата блокировок, используемых для обеспечения описанной выше политики синхронизации, поэтому обработчики не будут задерживать получение данных другими потоками. Обработчику не следует вызывать метод receive этого канала; в противном случае будет выброшено исключение IllegalReceiveException.
- Параметры типа:
T— тип прикреплённого объекта- Параметры:
-
dst— буфер, в который должны быть переданы байты сообщения -
attachment— объект, прикрепляемый к операции получения данных; может быть равенnull -
handler— обработчик уведомлений от стека SCTP илиnull, чтобы игнорировать все уведомления - Возвращает:
- Объект
MessageInfo;null, если этот канал работает в неблокирующем режиме и сообщения недоступны немедленно либо если обработчик уведомлений возвращаетRETURNпосле обработки уведомления - Выбрасывает:
-
ClosedChannelException— если этот канал закрыт -
AsynchronousCloseException— если другой поток закрывает этот канал во время выполнения операции чтения -
ClosedByInterruptException— если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая для текущего потока статус прерывания -
NotYetConnectedException— если этот канал ещё не подключён -
IllegalReceiveException— если указанный обработчик вызывает методreceiveэтого канала -
IOException— если произошла другая ошибка ввода-вывода
send
public abstract int send(ByteBuffer src, MessageInfo messageInfo) throws IOException
Если этот канал работает в неблокирующем режиме и в базовом выходном буфере достаточно места либо если этот канал работает в блокирующем режиме и достаточное место становится доступным, оставшиеся байты указанного байтового буфера передаются как одно сообщение. Отправка сообщения является атомарной, если только на сокете этого канала не включён параметр сокета явного завершения сообщения SCTP_EXPLICIT_COMPLETE.
Сообщение передаётся из байтового буфера так же, как при обычной операции write.
Байты будут записаны в поток с номером, указанным методом streamNumber в заданном объекте
messageInfo.
Этот метод можно вызвать в любое время. Если другой поток уже инициировал операцию отправки данных для этого канала, вызов этого метода будет заблокирован до завершения первой операции.
- Параметры:
-
src— буфер, содержащий отправляемое сообщение -
messageInfo— дополнительные данные об отправляемом сообщении - Возвращает:
- Количество отправленных байтов. Оно будет равно количеству байтов, оставшихся в буфере сообщения на момент вызова этого метода, либо, если этот канал работает в неблокирующем режиме, может быть равно нулю, если в базовом выходном буфере недостаточно места для сообщения
- Выбрасывает:
-
InvalidStreamException— еслиstreamNumnerменьше нуля или больше либо равно максимальному количеству исходящих потоков -
ClosedChannelException— если этот канал закрыт -
AsynchronousCloseException— если другой поток закрывает этот канал во время выполнения операции чтения -
ClosedByInterruptException— если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая для текущего потока статус прерывания -
NotYetConnectedException— если этот канал ещё не подключён -
IOException— если произошла другая ошибка ввода-вывода
© 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.