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 |
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)
このチャネルへデータグラムを書き込みます。
|
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
getOption, supportedOptions
protected DatagramChannel(SelectorProvider provider)
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
T
- ソケット・オプション値のタイプ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
- その他の入出力エラーが発生した場合public abstract SocketAddress getLocalAddress() throws IOException
チャネルがIP (Internet Protocol)ソケット・アドレスにバインド
されている場合は、このメソッドからの戻り値の型はInetSocketAddress
です。
セキュリティ・マネージャが設定されている場合は、セキュリティ・マネージャのcheckConnect
メソッドがローカル・アドレスおよび-1
を引数として呼び出され、操作が許可されるかどうかが確認されます。この操作が許可されない場合は、ループバック
・アドレスおよびチャネルのソケットのローカル・ポートを表すSocketAddress
が返されます。
getLocalAddress
、インタフェース: NetworkChannel
SocketAddress
、またはセキュリティ・マネージャによって拒否された場合はループバック・アドレスを表すSocketAddress
、またはチャネルのソケットがバインドされていない場合はnull
ClosedChannelException
- チャネルがクローズしている場合IOException
- 入出力エラーが発生した場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.