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_TOSIP (Internet Protocol) ヘッダーのサービスタイプ (ToS) オクテット IP_MULTICAST_IFIP (Internet Protocol) マルチキャストデータグラムのネットワークインタフェース IP_MULTICAST_TTLIP (Internet Protocol) マルチキャストデータグラムの有効期間 IP_MULTICAST_LOOPIP (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, registerregisterbegin, close, end, isOpenclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitclose, join, joingetLocalAddress, getOption, supportedOptionsprotected 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、クラス: SelectableChannelpublic abstract DatagramChannel bind(SocketAddress local) throws IOException
NetworkChannel このメソッドは、ソケットとローカルアドレスとの間の関連付けを確立するために使用されます。関連付けが確立されると、ソケットはチャネルが閉じられるまでバインドされたままになります。local パラメータの値が null の場合、ソケットは自動的に割り当てられるアドレスにバインドされます。
bind、インタフェース: NetworkChannellocal - ソケットのバインド先のアドレス、または自動的に割り当てられるソケットアドレスにソケットをバインドする場合は nullAlreadyBoundException - ソケットがすでにバインドされている場合UnsupportedAddressTypeException - 指定されたアドレスのタイプがサポート対象外の場合ClosedChannelException - チャネルがクローズしている場合IOException - その他の入出力エラーが発生した場合SecurityException - セキュリティーマネージャーがインストールされていて、その checkListen メソッドが操作を拒否した場合NetworkChannel.getLocalAddress()public abstract <T> DatagramChannel setOption(SocketOption<T> name, T value) throws IOException
NetworkChannelsetOption、インタフェース: NetworkChannelname - ソケットオプションvalue - ソケットオプションの値。一部のソケットオプションに対しては、null の値が有効な値である場合があります。UnsupportedOperationException - チャネルがソケットオプションをサポートしていない場合IllegalArgumentException - 値がこのソケットオプションに対して有効な値でない場合ClosedChannelException - このチャネルがクローズしている場合IOException - 入出力エラーが発生した場合StandardSocketOptionspublic abstract DatagramSocket socket()
返されるオブジェクトは、DatagramSocket クラスで宣言されていない public メソッドは宣言しません。
public abstract boolean isConnected()
open で、接続されている場合にかぎり truepublic 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
nullClosedChannelException - チャネルがクローズしている場合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、インタフェース: ReadableByteChanneldst - バイトの転送先バッファーNotYetConnectedException - このチャネルのソケットが接続されていない場合ClosedChannelException - このチャネルがクローズしている場合AsynchronousCloseException - 読み取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException - 読み取り操作の進行中に、別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException - その他の入出力エラーが発生した場合public abstract long read(ByteBuffer[] dsts, int offset, int length) throws IOException
このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアからのデータグラムのみを受け付けます。指定されたバッファー内に残っているバイト数よりデータグラムのバイト数のほうが多い場合、収まりきらなかったバイトは通知なく破棄されます。それ以外の場合は、このメソッドは ScatteringByteChannel インタフェースの指定どおりに動作します。
read、インタフェース: ScatteringByteChanneldsts - バイトの転送先バッファーoffset - 最初のバイトの転送先となるバッファー配列内のオフセット。dsts.length 以下の負でない値length - アクセスされる最大バッファー数。dsts.length - offset 以下の負でない値NotYetConnectedException - このチャネルのソケットが接続されていない場合ClosedChannelException - このチャネルがクローズしている場合AsynchronousCloseException - 読み取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException - 読み取り操作の進行中に、別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException - その他の入出力エラーが発生した場合public final long read(ByteBuffer[] dsts) throws IOException
このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアからのデータグラムのみを受け付けます。指定されたバッファー内に残っているバイト数よりデータグラムのバイト数のほうが多い場合、収まりきらなかったバイトは通知なく破棄されます。それ以外の場合は、このメソッドは ScatteringByteChannel インタフェースの指定どおりに動作します。
read、インタフェース: ScatteringByteChanneldsts - バイトの転送先バッファーNotYetConnectedException - このチャネルのソケットが接続されていない場合ClosedChannelException - このチャネルがクローズしている場合AsynchronousCloseException - 読み取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException - 読み取り操作の進行中に、別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException - その他の入出力エラーが発生した場合public abstract int write(ByteBuffer src) throws IOException
このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアに直接データグラムを送信します。それ以外の場合は、WritableByteChannel インタフェースの指定どおりに動作します。
write、インタフェース: WritableByteChannelsrc - バイトの取得先バッファーNotYetConnectedException - このチャネルのソケットが接続されていない場合ClosedChannelException - このチャネルがクローズしている場合AsynchronousCloseException - 書き込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException - 書き込み中に別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException - その他の入出力エラーが発生した場合public abstract long write(ByteBuffer[] srcs, int offset, int length) throws IOException
このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアに直接データグラムを送信します。それ以外の場合は、GatheringByteChannel インタフェースの指定どおりに動作します。
write、インタフェース: GatheringByteChannelsrcs - バイトの取得先バッファーoffset - 最初のバイトの取得先となるバッファー配列内のオフセット。srcs.length 以下の負でない値length - アクセスされる最大バッファー数。srcs.length - offset 以下の負でない値NotYetConnectedException - このチャネルのソケットが接続されていない場合ClosedChannelException - このチャネルがクローズしている場合AsynchronousCloseException - 書き込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException - 書き込み中に別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException - その他の入出力エラーが発生した場合public final long write(ByteBuffer[] srcs) throws IOException
このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアに直接データグラムを送信します。それ以外の場合は、GatheringByteChannel インタフェースの指定どおりに動作します。
write、インタフェース: GatheringByteChannelsrcs - バイトの取得先バッファーNotYetConnectedException - このチャネルのソケットが接続されていない場合ClosedChannelException - このチャネルがクローズしている場合AsynchronousCloseException - 書き込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException - 書き込み中に別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException - その他の入出力エラーが発生した場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.