Spec-Zone.ru › OpenJDK 8

Класс DatagramChannel

  • java.lang.Object
    • java.nio.channels.spi.AbstractInterruptibleChannel
      • java.nio.channels.SelectableChannel
        • java.nio.channels.spi.AbstractSelectableChannel
          • java.nio.channels.DatagramChannel
Все реализованные интерфейсы:
Closeable, AutoCloseable, ByteChannel, Channel, GatheringByteChannel, InterruptibleChannel, MulticastChannel, NetworkChannel, ReadableByteChannel, ScatteringByteChannel, WritableByteChannel

public abstract class DatagramChannel
extends AbstractSelectableChannel
implements ByteChannel, ScatteringByteChannel, GatheringByteChannel, MulticastChannel

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

Канал дейтаграмм создается путем вызова одного из методов open этого класса. Невозможно создать канал для произвольного, уже существующего сокета дейтаграмм. Недавно созданный канал дейтаграмм открыт, но не подключен. Для использования методов send и receive не требуется подключение канала дейтаграмм. Для избежания накладных расходов проверки безопасности, которые в противном случае выполняются как часть каждой операции отправки и получения, канал дейтаграмм можно подключить, вызвав его метод connect. Для использования методов read и write канал дейтаграмм должен быть подключен, поскольку эти методы не принимают и не возвращают адреса сокетов.

После подключения канал дейтаграмм остается подключенным до его отключения или закрытия. Подключение канала дейтаграмм можно определить, вызвав его метод isConnected.

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

Имя параметра Описание
SO_SNDBUF Размер буфера отправки сокета
SO_RCVBUF Размер буфера приема сокета
SO_REUSEADDR Повторное использование адреса
SO_BROADCAST Разрешить передачу широковещательных дейтаграмм
IP_TOS Октава типа сервиса (ToS) в заголовке протокола Internet (IP)
IP_MULTICAST_IF Сетевой интерфейс для дейтаграмм интернет-протокола (IP) multicast
IP_MULTICAST_TTL Время жизни для дейтаграмм интернет-протокола (IP) multicast
IP_MULTICAST_LOOP Возврат для дейтаграмм интернет-протокола (IP) multicast
Дополнительные (специфичные для реализации) параметры также могут поддерживаться.

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

С тех пор:
1.4

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

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

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

Методы

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

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

abstract DatagramChannel connect(SocketAddress remote)

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

abstract DatagramChannel disconnect()

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

abstract SocketAddress getLocalAddress()

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

abstract SocketAddress getRemoteAddress()

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

abstract boolean isConnected()

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

static DatagramChannel open()

Открывает канал дейтаграмм.

static DatagramChannel open(ProtocolFamily family)

Открывает канал дейтаграмм.

abstract int read(ByteBuffer dst)

Читает дейтаграмму из этого канала.

long read(ByteBuffer[] dsts)

Читает дейтаграмму из этого канала.

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

Читает дейтаграмму из этого канала.

abstract SocketAddress receive(ByteBuffer dst)

Принимает дейтаграмму через этот канал.

abstract int send(ByteBuffer src, SocketAddress target)

Отправляет дейтаграмму через этот канал.

abstract <T> DatagramChannel setOption(SocketOption<T> name, T value)

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

abstract DatagramSocket 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

blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register

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

register

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

begin, close, end, isOpen

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

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

Методы, унаследованные от интерфейса java.nio.channels.MulticastChannel

close, join, join

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

getOption, supportedOptions

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

isOpen

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

DatagramChannel

protected DatagramChannel(SelectorProvider provider)

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

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

Методы

open

public static DatagramChannel open()
                            throws IOException

Открывает канал данных дейтаграммы.

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

Семейство протоколов ProtocolFamily сокета канала зависит от платформы (и, возможно, конфигурации), поэтому не определено. Метод open позволяет выбрать семейство протоколов при открытии канала данных дейтаграммы и должен использоваться для открытия каналов данных дейтаграммы, предназначенных для интернет-протокольного многоадресного вещания.

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

open

public static DatagramChannel open(ProtocolFamily family)
                            throws IOException

Открывает канал данных дейтаграммы.

Параметр family используется для указания семейства протоколов ProtocolFamily. Если канал данных дейтаграммы предназначен для многоадресного вещания IP, то он должен соответствовать типу адреса многоадресных групп, к которым присоединится этот канал.

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

Параметры:
family - Семейство протоколов
Возвращает:
Новый канал данных дейтаграммы
Исключения:
UnsupportedOperationException - Если указанное семейство протоколов не поддерживается. Например, предположим, что параметр указан как StandardProtocolFamily.INET6, но IPv6 не включен на платформе.
IOException - Если произошла ошибка ввода-вывода
С тех пор как:
1.7

validOps

public final int validOps()

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

Каналы данных дейтаграммы поддерживают чтение и запись, поэтому этот метод возвращает (SelectionKey.OP_READ | SelectionKey.OP_WRITE).

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

bind

public abstract DatagramChannel bind(SocketAddress local)
                              throws IOException

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

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

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

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

setOption

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

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

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

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

socket

public abstract DatagramSocket socket()

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

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

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

isConnected

public abstract boolean isConnected()

Определяет, подключен ли сокет этого канала.

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

connect

public abstract DatagramChannel connect(SocketAddress remote)
                                 throws IOException

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

Сокет канала настроен таким образом, что он только получает дейтаграммы от и отправляет дейтаграммы на указанный удаленный адрес партнера. После подключения дейтаграммы не могут быть получены или отправлены на какой-либо другой адрес. Сокет дейтаграммы остается подключенным до его явного отключения или закрытия.

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

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

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

disconnect

public abstract DatagramChannel disconnect()
                                    throws IOException

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

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

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

Если сокет этого канала не подключен или канал закрыт, то вызов этого метода не окажет никакого эффекта.

Возвращает:
Этот канал данных дейтаграммы
Исключения:
IOException - Если произошла какая-либо другая ошибка ввода-вывода

getRemoteAddress

public abstract SocketAddress getRemoteAddress()
                                        throws IOException

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

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

receive

public abstract SocketAddress receive(ByteBuffer dst)
                               throws IOException

Принимает датаграмму через этот канал.

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

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

Этот метод выполняет точно те же проверки безопасности, что и метод receive класса DatagramSocket. То есть, если сокет не подключён к определённому удалённому адресу и установлен менеджер безопасности, то для каждой полученной датаграммы этот метод проверяет, разрешает ли менеджер безопасности адрес и порт отправителя с помощью метода checkAccept. Накладные расходы на эту проверку безопасности можно избежать, предварительно подключив сокет с помощью метода connect.

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

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

send

public abstract int send(ByteBuffer src,
                         SocketAddress target)
                  throws IOException

Отправляет датаграмму через этот канал.

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

Датаграмма передается из буфера байтов, как при обычной операции write.

Этот метод выполняет точно те же проверки безопасности, что и метод send класса DatagramSocket. То есть, если сокет не подключён к определённому удалённому адресу и установлен менеджер безопасности, то для каждой отправленной датаграммы этот метод проверяет, разрешает ли менеджер безопасности целевой адрес и порт с помощью метода checkConnect. Накладные расходы на эту проверку безопасности можно избежать, предварительно подключив сокет с помощью метода connect.

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

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

read

public abstract int read(ByteBuffer dst)
                  throws IOException

Читает датаграмму из этого канала.

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

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

read

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

Читает датаграмму из этого канала.

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

Указано в:
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.

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

write

public abstract int write(ByteBuffer src)
                   throws IOException

Записывает датаграмму в этот канал.

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

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

write

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

Записывает дейтаграмму в данный канал.

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

Указано в:
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.

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

getLocalAddress

public abstract SocketAddress getLocalAddress()
                                       throws IOException

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

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

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

Указано в:
getLocalAddress в интерфейсе NetworkChannel
Возвращает:
Адрес, к которому привязан сокет, или объект 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.

Spec-Zone.ru

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