public abstract class DatagramChannel extends AbstractSelectableChannel implements ByteChannel, ScatteringByteChannel, GatheringByteChannel, MulticastChannel
データグラムチャネルは、このクラスの open
メソッドの 1 つを呼び出すことによって作成されます。任意の既存のデータグラムソケットのチャネルを作成することはできません。新しく作成されたデータグラムチャネルはオープンですが、接続は確立されていません。send
メソッドと receive
メソッドを使用するために、データグラムチャネルを接続する必要はありません。セキュリティーチェックのオーバーヘッドを回避する目的で connect
メソッドを呼び出すと、データグラムチャネルが接続され、送受信操作のたびにセキュリティーチェックが行われずに済みます。ソケットアドレスを受け付けない (返さない) read
メソッドと write
メソッドを使用するためには、データグラムチャネルを接続する必要があります。
一度接続されたデータグラムチャネルは、接続が切断されるかクローズされるまで接続されたままになります。データグラムチャネルが接続されているかどうかは、isConnected
メソッドの呼び出しによって判断できます。
ソケットオプションは setOption
メソッドを使用して構成されます。IP (Internet Protocol) ソケットへのデータグラムチャネルでは次のオプションがサポートされます。
追加 (実装固有) のオプションをサポートできる場合もあります。
オプション名 説明 SO_SNDBUF
ソケット送信バッファーのサイズ SO_RCVBUF
ソケット受信バッファーのサイズ SO_REUSEADDR
アドレスを再利用します SO_BROADCAST
ブロードキャストデータグラムの転送を許可します IP_TOS
IP (Internet Protocol) ヘッダーのサービスタイプ (ToS) オクテット IP_MULTICAST_IF
IP (Internet Protocol) マルチキャストデータグラムのネットワークインタフェース IP_MULTICAST_TTL
IP (Internet Protocol) マルチキャストデータグラムの有効期間 IP_MULTICAST_LOOP
IP (Internet Protocol) マルチキャストデータグラムのループバック
データグラムチャネルは、複数の並行スレッドで安全に使用できます。データグラムチャネルは並行読み込みおよび書き込みをサポートします。ただし、読み込みを行うスレッドも書き込みを行うスレッドも特定の時点では常に 1 個以下です。
修飾子 | コンストラクタと説明 |
---|---|
protected |
DatagramChannel(SelectorProvider provider)
このクラスの新しいインスタンスを初期化します。
|
修飾子と型 | メソッドと説明 |
---|---|
abstract DatagramChannel |
bind(SocketAddress local)
チャネルのソケットをローカルアドレスにバインドします。
|
abstract DatagramChannel |
connect(SocketAddress remote)
このチャネルのソケットを接続します。
|
abstract DatagramChannel |
disconnect()
このチャネルのソケットの接続を切断します。
|
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)
このチャネルへデータグラムを書き込みます。
|
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register
register
begin, close, end, isOpen
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
close, join, join
getLocalAddress, getOption, supportedOptions
protected DatagramChannel(SelectorProvider provider)
public static DatagramChannel open() throws IOException
システム全体のデフォルト SelectorProvider
オブジェクトの openDatagramChannel
メソッドを呼び出すことで、新しいチャネルが作成されます。チャネルは接続されません。
チャネルのソケットの ProtocolFamily
は、プラットフォーム (および場合によっては構成) によって異なるため、未指定です。open
を使用して、データグラムチャネルを開くときにプロトコルファミリを選択できます。IP (Internet Protocol) マルチキャストを対象とするデータグラムチャネルを開くときは、これを使用するべきです。
IOException
- 入出力エラーが発生した場合public static DatagramChannel open(ProtocolFamily family) throws IOException
family
パラメータは、ProtocolFamily
を指定するために使用されます。IP マルチキャストにデータグラムチャネルを使用する場合、これは、このチャネルが参加するマルチキャストグループのアドレスタイプに対応するべきです。
システム全体のデフォルト SelectorProvider
オブジェクトの openDatagramChannel
メソッドを呼び出すことで、新しいチャネルが作成されます。チャネルは接続されません。
family
- プロトコルファミリUnsupportedOperationException
- 指定されたプロトコルファミリがサポートされていない場合。たとえば、パラメータに StandardProtocolFamily.INET6
が指定されているが、IPv6 がプラットフォームで有効になっていないとします。IOException
- 入出力エラーが発生した場合public final int validOps()
データグラムチャネルでは、読み取りと書き込みがサポートされるため、このメソッドは (SelectionKey.OP_READ
| SelectionKey.OP_WRITE
) を返します。
validOps
、クラス: SelectableChannel
public abstract DatagramChannel bind(SocketAddress local) throws IOException
NetworkChannel
このメソッドは、ソケットとローカルアドレスとの間の関連付けを確立するために使用されます。関連付けが確立されると、ソケットはチャネルが閉じられるまでバインドされたままになります。local
パラメータの値が null
の場合、ソケットは自動的に割り当てられるアドレスにバインドされます。
bind
、インタフェース: NetworkChannel
local
- ソケットのバインド先のアドレス、または自動的に割り当てられるソケットアドレスにソケットをバインドする場合は null
AlreadyBoundException
- ソケットがすでにバインドされている場合UnsupportedAddressTypeException
- 指定されたアドレスのタイプがサポート対象外の場合ClosedChannelException
- チャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合SecurityException
- セキュリティーマネージャーがインストールされていて、その checkListen
メソッドが操作を拒否した場合NetworkChannel.getLocalAddress()
public abstract <T> DatagramChannel setOption(SocketOption<T> name, T value) throws IOException
NetworkChannel
setOption
、インタフェース: NetworkChannel
name
- ソケットオプションvalue
- ソケットオプションの値。一部のソケットオプションに対しては、null
の値が有効な値である場合があります。UnsupportedOperationException
- チャネルがソケットオプションをサポートしていない場合IllegalArgumentException
- 値がこのソケットオプションに対して有効な値でない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- 入出力エラーが発生した場合StandardSocketOptions
public abstract DatagramSocket socket()
返されるオブジェクトは、DatagramSocket
クラスで宣言されていない public メソッドは宣言しません。
public abstract boolean isConnected()
open
で、接続されている場合にかぎり true
public abstract DatagramChannel connect(SocketAddress remote) throws IOException
チャネルのソケットは、指定されたリモート「ピア」アドレス以外とはデータグラムをやりとりしないように構成されています。接続後、指定されたアドレス以外のアドレスとデータグラムがやりとりされることはありません。データグラムソケットは、接続を明示的に切断するかクローズするまで接続されたままになります。
このメソッドは、DatagramSocket
クラスの connect
メソッドとまったく同じセキュリティーチェックを行います。セキュリティーマネージャーがインストールされている場合、このメソッドは、checkAccept
メソッドが指定されたリモートアドレスからのデータグラムの受信を許可し、checkConnect
メソッドが指定されたリモートアドレスへのデータグラムの送信を許可することを検証します。
このメソッドはいつでも呼び出すことができます。呼び出し時に進行中の読み込み操作または書き込み操作には一切影響を及ぼしません。このチャネルのソケットがバインドされていない場合は、このメソッドは bind
メソッドを null
のパラメータで呼び出した場合と同様に、最初にソケットを自動的に割り当てられるアドレスにバインドします。
remote
- このチャネルの接続先リモートアドレスClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 接続操作の進行中に別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合SecurityException
- セキュリティーマネージャーがインストールされていて、指定されたリモートアドレスへのアクセスが許可されていない場合IOException
- その他の入出力エラーが発生した場合public abstract DatagramChannel disconnect() throws IOException
チャネルのソケットは、インストールされているセキュリティーマネージャーから許可された場合にかぎり、あらゆるリモートアドレスとデータグラムをやりとりできます。
このメソッドはいつでも呼び出すことができます。呼び出し時に進行中の読み込み操作または書き込み操作には一切影響を及ぼしません。
このチャネルのソケットが接続されていない場合、またはチャネルがクローズしている場合、このメソッドを呼び出しても何の効果もありません。
IOException
- その他の入出力エラーが発生した場合public abstract SocketAddress getRemoteAddress() throws IOException
null
ClosedChannelException
- チャネルがクローズしている場合IOException
- 入出力エラーが発生した場合public abstract SocketAddress receive(ByteBuffer dst) throws IOException
データグラムをただちに使用できる場合 (このチャネルがブロックモードで動作していてデータグラム 1 個を使用できる場合) は、データグラムが指定された byte バッファーにコピーされたあと、ソースアドレスが返されます。このチャネルが非ブロックモードで動作していてデータグラムをすぐに使用できない場合は、ただちに null が返されます。
データグラムは、通常の read
操作の場合と同様に、指定された byte バッファーの現在位置に転送されます。バッファー内に残っているバイト数がデータグラムの格納に必要なバイト数より少ない場合、収まりきらなかったデータグラムは通知なしで破棄されます。
このメソッドは、DatagramSocket
クラスの receive
メソッドとまったく同じセキュリティーチェックを行います。ソケットが特定のリモートアドレスに接続されておらず、セキュリティーマネージャーがインストールされている場合、このメソッドは、受信されたデータグラムごとにソースのアドレスとポート番号がセキュリティーマネージャーの checkAccept
メソッドによって許可されていることを検証します。このセキュリティーチェックのオーバーヘッドを回避するには、最初に connect
メソッドを使ってソケットを接続します。
このメソッドはいつでも呼び出すことができます。ただし、ほかのスレッドがこのチャネルに対して読み込み操作を開始している場合、このメソッドの呼び出しは最初の操作が終わるまでブロックされます。このチャネルのソケットがバインドされていない場合は、このメソッドは bind
メソッドを null
のパラメータで呼び出した場合と同様に、最初にソケットを自動的に割り当てられるアドレスにバインドします。
dst
- データグラムの転送先バッファーClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読み取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読み取り操作の進行中に、別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合SecurityException
- セキュリティーマネージャーがインストールされていて、データグラムの送信側がデータグラムの受信を許可していない場合IOException
- その他の入出力エラーが発生した場合public abstract int send(ByteBuffer src, SocketAddress target) throws IOException
チャネルの動作モードが非ブロックモードで基準となる出力バッファーの容量が十分でない場合や、動作モードがブロックモードで十分な容量がある場合、指定されたバッファー内に残っているバイトは単一のデータグラムとして指定されたターゲットアドレスへ転送されます。
データグラムは、通常の write
操作を実行した場合と同様に、byte バッファーから転送されます。
このメソッドは、DatagramSocket
クラスの send
メソッドとまったく同じセキュリティーチェックを行います。ソケットが特定のリモートアドレスに接続されておらず、セキュリティーマネージャーがインストールされている場合、このメソッドは、送信されたデータグラムごとにターゲットのアドレスとポート番号がセキュリティーマネージャーの checkConnect
メソッドによって許可されていることを検証します。このセキュリティーチェックのオーバーヘッドを回避するには、最初に connect
メソッドを使ってソケットを接続します。
このメソッドはいつでも呼び出すことができます。ただし、ほかのスレッドがこのチャネルに対して書き込み操作を開始している場合、このメソッドの呼び出しは最初の操作が終わるまでブロックされます。このチャネルのソケットがバインドされていない場合は、このメソッドは bind
メソッドを null
のパラメータで呼び出した場合と同様に、最初にソケットを自動的に割り当てられるアドレスにバインドします。
src
- 送信されるデータグラムを含むバッファーtarget
- データグラムの送信先アドレスClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読み取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読み取り操作の進行中に、別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合SecurityException
- セキュリティーマネージャーがインストールされていて、指定されたアドレスへのデータグラムの送信が許可されていない場合IOException
- その他の入出力エラーが発生した場合public abstract int read(ByteBuffer dst) throws IOException
このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアからのデータグラムのみを受け付けます。指定されたバッファー内に残っているバイト数よりデータグラムのバイト数のほうが多い場合、収まりきらなかったバイトは通知なく破棄されます。それ以外の場合は、このメソッドは ReadableByteChannel
インタフェースの指定どおりに動作します。
read
、インタフェース: ReadableByteChannel
dst
- バイトの転送先バッファーNotYetConnectedException
- このチャネルのソケットが接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読み取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読み取り操作の進行中に、別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合public abstract long read(ByteBuffer[] dsts, int offset, int length) throws IOException
このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアからのデータグラムのみを受け付けます。指定されたバッファー内に残っているバイト数よりデータグラムのバイト数のほうが多い場合、収まりきらなかったバイトは通知なく破棄されます。それ以外の場合は、このメソッドは ScatteringByteChannel
インタフェースの指定どおりに動作します。
read
、インタフェース: ScatteringByteChannel
dsts
- バイトの転送先バッファーoffset
- 最初のバイトの転送先となるバッファー配列内のオフセット。dsts.length 以下の負でない値length
- アクセスされる最大バッファー数。dsts.length - offset 以下の負でない値NotYetConnectedException
- このチャネルのソケットが接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読み取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読み取り操作の進行中に、別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合public final long read(ByteBuffer[] dsts) throws IOException
このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアからのデータグラムのみを受け付けます。指定されたバッファー内に残っているバイト数よりデータグラムのバイト数のほうが多い場合、収まりきらなかったバイトは通知なく破棄されます。それ以外の場合は、このメソッドは ScatteringByteChannel
インタフェースの指定どおりに動作します。
read
、インタフェース: ScatteringByteChannel
dsts
- バイトの転送先バッファーNotYetConnectedException
- このチャネルのソケットが接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読み取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読み取り操作の進行中に、別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合public abstract int write(ByteBuffer src) throws IOException
このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアに直接データグラムを送信します。それ以外の場合は、WritableByteChannel
インタフェースの指定どおりに動作します。
write
、インタフェース: WritableByteChannel
src
- バイトの取得先バッファーNotYetConnectedException
- このチャネルのソケットが接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 書き込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 書き込み中に別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合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
- その他の入出力エラーが発生した場合public final long write(ByteBuffer[] srcs) throws IOException
このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアに直接データグラムを送信します。それ以外の場合は、GatheringByteChannel
インタフェースの指定どおりに動作します。
write
、インタフェース: GatheringByteChannel
srcs
- バイトの取得先バッファーNotYetConnectedException
- このチャネルのソケットが接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 書き込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 書き込み中に別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.