Spec-Zone .ru
спецификации, руководства, описания, API
|
public abstract class SocketChannel extends AbstractSelectableChannel implements ByteChannel, ScatteringByteChannel, GatheringByteChannel, NetworkChannel
Канал сокета создается, вызывая один из open
методы этого класса. Не возможно создать канал для произвольного, существующего ранее сокета. Недавно создаваемый канал сокета открыт, но еще соединен. Попытка вызвать работу ввода-вывода на несвязанный канал вызовет a 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
методы взаимно синхронизируются друг против друга, и попытка инициировать операцию чтения или операцию записи, в то время как вызов одного из этих методов происходит, блокирует, пока тот вызов не полон.
Модификатор | Конструктор и Описание |
---|---|
protected |
SocketChannel(SelectorProvider provider)
Инициализирует новый экземпляр этого класса.
|
Модификатор и Тип | Метод и Описание |
---|---|
abstract SocketChannel |
bind(SocketAddress local)
Связывает сокет канала с локальным адресом.
|
abstract boolean |
connect(SocketAddress remote)
Подключения сокет этого канала.
|
abstract boolean |
finishConnect()
Заканчивает процесс соединения канала сокета.
|
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)
Пишет последовательность байтов к этому каналу от подпоследовательности данных буферов.
|
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register
регистр
begin, close, end, isOpen
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getLocalAddress, getOption, supportedOptions
protected SocketChannel(SelectorProvider provider)
public static SocketChannel open() throws IOException
Новый канал создается, вызывая openSocketChannel
метод значения по умолчанию в масштабе всей системы SelectorProvider
объект.
IOException
- Если ошибка ввода-вывода происходитpublic static SocketChannel open(SocketAddress remote) throws IOException
Этот метод удобства работает как будто, вызывая open()
метод, вызывая connect
метод на получающийся канал сокета, передавая это remote, и затем возвращая тот канал.
remote
- Удаленный адрес, с которым должен быть соединен новый каналAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как работа подключения происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как работа подключения происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаUnresolvedAddressException
- Если данный удаленный адрес не полностью разрешаетсяUnsupportedAddressTypeException
- Если тип данного удаленного адреса не поддерживаетсяSecurityException
- Если менеджер безопасности был установлен, и он не разрешает доступ к данной удаленной конечной точкеIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic final int validOps()
Соединение поддержки каналов сокета, чтение, и запись, таким образом, этот метод возвращает ( SelectionKey.OP_CONNECT
| SelectionKey.OP_READ
| SelectionKey.OP_WRITE
).
validOps
в классе SelectableChannel
public abstract SocketChannel bind(SocketAddress local) throws IOException
NetworkChannel
Этот метод используется, чтобы установить ассоциацию между сокетом и локальным адресом. Как только ассоциация устанавливается тогда, сокет остается связанным, пока канал не закрывается. Если local
у параметра есть значение null
тогда сокет будет связан с адресом, который присваивается автоматически.
bind
в интерфейсе NetworkChannel
local
- Адрес, чтобы связать сокет, или null
связывать сокет с автоматически присвоенным адресом сокетаConnectionPendingException
- Если работа подключения неблокирования уже происходит на этом каналеAlreadyBoundException
- Если сокет уже связываетсяUnsupportedAddressTypeException
- Если тип данного адреса не поддерживаетсяClosedChannelException
- Если канал закрываетсяIOException
- Если некоторая другая ошибка ввода-вывода происходитNetworkChannel.getLocalAddress()
public abstract <T> SocketChannel setOption(SocketOption<T> name, T value) throws IOException
NetworkChannel
setOption
в интерфейсе NetworkChannel
name
- Опция сокетаvalue
- Значение опции сокета. Значение null
может быть допустимое значение для некоторых опций сокета.UnsupportedOperationException
- Если опция сокета не поддерживается этим каналомIllegalArgumentException
- Если значение не является допустимым значением для этой опции сокетаClosedChannelException
- Если этот канал закрываетсяIOException
- Если ошибка ввода-вывода происходитStandardSocketOptions
public abstract SocketChannel shutdownInput() throws IOException
Как только завершение работы для того, чтобы считать тогда дальнейшие чтения на канале возвратится -1
, индикация конца потока. Если входная сторона соединения уже является завершением работы, тогда вызывающим этот метод, не имеет никакого эффекта.
NotYetConnectedException
- Если этот канал еще не соединяетсяClosedChannelException
- Если этот канал закрываетсяIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract SocketChannel shutdownOutput() throws IOException
Как только завершение работы для того, чтобы записать тогда дальнейшие попытки записать в канал бросит ClosedChannelException
. Если выходная сторона соединения уже является завершением работы, тогда вызывающим этот метод, не имеет никакого эффекта.
NotYetConnectedException
- Если этот канал еще не соединяетсяClosedChannelException
- Если этот канал закрываетсяIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract Socket socket()
Возвращенный объект не будет объявлять открытых методов, которые не объявляются в Socket
класс.
public abstract boolean isConnected()
open
и соединенныйpublic abstract boolean isConnectionPending()
finishConnect
методpublic abstract boolean connect(SocketAddress remote) throws IOException
Если этот канал находится в неблокировании режима тогда, вызов этого метода инициирует работу соединения неблокирования. Если соединение сразу устанавливается, как это может произойти с локальным соединением, то этот метод возвращает true. Иначе этот метод возвращает false, и работа соединения должна позже быть завершена, вызывая finishConnect
метод.
Если этот канал будет в блокировании режима тогда, то вызов этого метода блокирует, пока соединение не устанавливается, или ошибка ввода-вывода происходит.
Этот метод выполняет точно те же самые проверки безопасности как Socket
класс. Таким образом, если менеджер безопасности был установлен тогда, этот метод проверяет что checkConnect
метод разрешает соединяться с адресом и номером порта данной удаленной конечной точки.
В любое время может быть вызван этот метод. Если операция чтения или операция записи на этот канал вызываются, в то время как вызов этого метода происходит тогда, что работа сначала блокирует, пока этот вызов не полон. Если попытка подключения будет инициироваться, но перестанет работать, то есть, если вызов этого метода выдаст проверенное исключение, то канал будет закрыт.
remote
- Удаленный адрес, с которым должен быть соединен этот каналAlreadyConnectedException
- Если этот канал уже соединяетсяConnectionPendingException
- Если работа соединения неблокирования уже происходит на этом каналеClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как работа подключения происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как работа подключения происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаUnresolvedAddressException
- Если данный удаленный адрес не полностью разрешаетсяUnsupportedAddressTypeException
- Если тип данного удаленного адреса не поддерживаетсяSecurityException
- Если менеджер безопасности был установлен, и он не разрешает доступ к данной удаленной конечной точкеIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract boolean finishConnect() throws IOException
Работа соединения неблокирования инициируется, помещая канал сокета в неблокировании режима и затем вызове connect
метод. Как только соединение устанавливается, или попытка перестала работать, канал сокета станет соединяемым, и этот метод может быть вызван, чтобы завершить последовательность соединения. Если работа соединения, отказавшая, тогда вызывая этот метод, вызовет соответствующее IOException
быть брошенным.
Если этот канал будет уже соединен тогда, то этот метод не будет блокировать и сразу возвратит true. Если этот канал будет в неблокировании режима тогда, то этот метод возвратит false, если процесс соединения еще не будет полон. Если этот канал будет в блокировании режима тогда, то этот метод блокирует до соединения или завершается или перестал работать, и будет всегда или возвращать true или выдавать проверенное исключение, описывающее отказ.
В любое время может быть вызван этот метод. Если операция чтения или операция записи на этот канал вызываются, в то время как вызов этого метода происходит тогда, что работа сначала блокирует, пока этот вызов не полон. Если попытка подключения перестанет работать, то есть, если вызов этого метода выдаст проверенное исключение, то канал будет закрыт.
NoConnectionPendingException
- Если этот канал не соединяется, и работа соединения не инициироваласьClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как работа подключения происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как работа подключения происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract SocketAddress getRemoteAddress() throws IOException
Где канал связывается и соединяется с интернет-адресом сокета Протокола тогда, возвращаемое значение от этого метода имеет тип InetSocketAddress
.
null
если сокет канала не соединяетсяClosedChannelException
- Если канал закрываетсяIOException
- Если ошибка ввода-вывода происходит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
- Буфер, в который должны быть переданы байтыNotYetConnectedException
- Если этот канал еще не соединяетсяClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция чтения происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция чтения происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходит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.lengthlength
- Максимальное количество буферов, которые будут получены доступ; должно быть неотрицательным и не больше чем dsts.length - offsetNotYetConnectedException
- Если этот канал еще не соединяетсяClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция чтения происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция чтения происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic final long read(ByteBuffer[] dsts) throws IOException
ScatteringByteChannel
Вызов этого метода формы c.read(dsts) ведет себя точно тем же самым способом как вызов
c.read(dsts, 0, dsts.length);
read
в интерфейсе ScatteringByteChannel
dsts
- Буферы, в которые должны быть переданы байтыNotYetConnectedException
- Если этот канал еще не соединяетсяClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция чтения происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция чтения происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходит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
- Если некоторая другая ошибка ввода-вывода происходит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.lengthlength
- Максимальное количество буферов, которые будут получены доступ; должно быть неотрицательным и не больше чем srcs.length - offsetNotYetConnectedException
- Если этот канал еще не соединяетсяClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция записи происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция записи происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходит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
- Если некоторая другая ошибка ввода-вывода происходит
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.