モジュール jdk.sctp
パッケージ com.sun.nio.sctp

クラスSctpChannel

すべての実装されたインタフェース:
Closeable, AutoCloseable, Channel, InterruptibleChannel

public abstract class SctpChannel
extends AbstractSelectableChannel
メッセージ指向の接続されたSCTPソケットの選択可能なチャネルです。

SCTPチャネルは、1つのSCTPアソシエーションのみを制御できます。 このクラスのいずれかのopenメソッドを呼び出すと、SCTPChannelが作成されます。 新しく作成されたチャネルはオープンですが、接続は確立されていません。つまり、リモート・ピアとのアソシエーション設定はありません。 未接続のチャネルに対して入出力操作を呼び出そうとすると、NotYetConnectedExceptionがスローされます。 アソシエーションを設定するには、いずれかのconnectメソッドを使用してチャネルを接続します。 接続されたチャネルは、クローズされるまで接続されたままになります。 チャネルが接続されているかどうかは、getRemoteAddressesの呼出しによって判断できます。

SCTPチャネルは非ブロック接続をサポートします。チャネルの作成とリモート・ソケットへのリンクを確立するプロセスの開始はconnectメソッドによって行われ、後でfinishConnectメソッドによって完了します。 接続操作が実行中であるかどうかは、isConnectionPendingメソッドの呼出しによって判断できます。

ソケット・オプションはsetOptionメソッドを使用して構成されます。 SCTPチャネルでは次のオプションがサポートされます。

ソケット・オプション
オプション名 説明
SCTP_DISABLE_FRAGMENTS メッセージの断片化を有効または無効にします
SCTP_EXPLICIT_COMPLETE 明示的なメッセージの完了を有効または無効にします
SCTP_FRAGMENT_INTERLEAVE メッセージ受信者に対するメッセージの表現方法を制御します
SCTP_INIT_MAXSTREAMS アソシエーションの初期化中にローカル・エンドポイントで要求されたストリームの最大数
SCTP_NODELAY Nagleに似たアルゴリズムを有効または無効にします
SCTP_PRIMARY_ADDR ローカルSCTPスタックで、指定されたピア・アドレスがアソシエーション・プライマリとして使用されるように要求します
SCTP_SET_PEER_PRIMARY_ADDR 囲まれたアドレスがピアによってアソシエーション・プライマリとしてマークされるように要求します
SO_SNDBUF ソケット送信バッファのサイズ
SO_RCVBUF ソケット受信バッファのサイズ
SO_LINGER 閉じるときにデータが存在する場合は遅延します(ブロック・モードに構成されている場合のみ)
追加(実装固有)のオプションをサポートできる場合もあります。 supportedOptionsメソッドを呼び出すと、サポートされているオプションのリストが取得されます。

SCTPチャネルは、複数の並行スレッドで安全に使用できます。 データグラム・チャネルは並行読取りおよび書込みをサポートします。ただし、読取りを行うスレッドも書込みを行うスレッドも特定の時点では常に1個以下です。 connectメソッドとfinishConnectメソッドは相互に同期しており、いずれかのメソッドの呼出し中に送信または受信操作を開始しようとすると、この処理はその呼出しが完了するまでブロックされます。

導入されたバージョン:
1.7
  • コンストラクタの詳細

    • SctpChannel

      protected SctpChannel​(SelectorProvider provider)
      このクラスの新しいインスタンスを初期化します。
      パラメータ:
      provider - このチャネルのセレクタ・プロバイダ
  • メソッドの詳細

    • open

      public static SctpChannel open() throws IOException
      SCTPチャネルを開きます。

      新しいチャネルは未バインドで未接続です。

      戻り値:
      新しいSCTPチャネル
      例外:
      UnsupportedOperationException - SCTPプロトコルがサポートされていない場合
      IOException - 入出力エラーが発生した場合
    • open

      public static SctpChannel open​(SocketAddress remote, int maxOutStreams, int maxInStreams) throws IOException
      SCTPチャネルを開き、リモート・アドレスに接続します。

      これは簡易メソッドであり、次の式の評価と等価です。

       open().connect(remote, maxOutStreams, maxInStreams);
       

      パラメータ:
      remote - 新しいチャネルの接続先リモート・アドレス
      maxOutStreams - アプリケーションで送信できることを予定するストリームの数。 65536以下の正の値にする必要があります(エンド・ポイントのデフォルト値を使用する場合は0)。
      maxInStreams - アプリケーションがサポートするように準備されるインバウンド・ストリームの最大数。 65536以下の正の値にする必要があります(エンド・ポイントのデフォルト値を使用する場合は0)。
      戻り値:
      指定されたアドレスに接続された、新しいSCTPチャネル
      例外:
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      UnresolvedAddressException - 指定されたリモート・アドレスが完全に解決されない場合
      UnsupportedAddressTypeException - 指定されたリモート・アドレスのタイプがサポート対象外の場合
      SecurityException - セキュリティ・マネージャがインストールされていて、指定されたリモート・ピアへのアクセスが許可されていない場合
      UnsupportedOperationException - SCTPプロトコルがサポートされていない場合
      IOException - その他の入出力エラーが発生した場合
    • association

      public abstract Association association() throws IOException
      このチャネルのソケット上のアソシエーションを返します。
      戻り値:
      アソシエーション。チャネルのソケットが接続されていない場合はnull
      例外:
      ClosedChannelException - チャネルがクローズしている場合
      IOException - その他の入出力エラーが発生した場合
    • bind

      public abstract SctpChannel bind​(SocketAddress local) throws IOException
      チャネルのソケットをローカル・アドレスにバインドします。

      このメソッドは、ソケットとローカル・アドレスとの間の関係を確立するために使用されます。 関係が確立されると、ソケットはチャネルが閉じられるまでバインドされたままになります。 この関係はunbindAddressによって削除される可能性があるため、必ずしもアドレスlocalとの関係であるとはかぎりませんが、このメソッドの呼出しが正常に完了すれば、チャネルのソケットにバインドされたローカル・アドレスが必ず1つ以上存在します。

      チャネルのソケットが(自動的に割り当てられない)特定のアドレスに正常にバインドされると、追加のアドレスをbindAddressを使用してバインドしたり、unbindAddressを使用して削除したりできます。

      パラメータ:
      local - ソケットのバインド先のローカル・アドレス、または自動的に割り当てられるソケット・アドレスにソケットをバインドする場合はnull
      戻り値:
      このチャネル
      例外:
      AlreadyConnectedException - このチャネルがすでに接続されている場合
      ClosedChannelException - このチャネルがクローズしている場合
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      AlreadyBoundException - このチャネルがすでにバインドされている場合
      UnsupportedAddressTypeException - 指定されたアドレスのタイプがサポート対象外の場合
      IOException - その他の入出力エラーが発生した場合
      SecurityException - セキュリティ・マネージャがインストールされていて、checkListenメソッドが操作を拒否した場合
    • bindAddress

      public abstract SctpChannel bindAddress​(InetAddress address) throws IOException
      指定されたアドレスをチャネルのソケットにバインドされているアドレスに追加します。

      指定されたアドレスは、ワイルドカード・アドレスであってはいけません。 このメソッドを呼び出す前に、まずbindを使用してチャネルをバインドする必要があります。そうしないと、NotYetBoundExceptionがスローされます。 bindメソッドは、引数としてSocketAddressを取ります。通常は、アドレスに加えてポート番号も含まれます。 チャネルの存続期間内はSCTPポート番号は同じままであるため、その後、このメソッドを使用してバインドされたアドレスにはアドレスのみが含まれます。

      接続されたアソシエーションにアドレスを追加することはオプションの機能です。 エンド・ポイントで動的なアドレス再構成がサポートされている場合は、ピア・アドレスのリストを変更するために、適切なメッセージがピアに送信されることがあります。

      パラメータ:
      address - ソケットにバインドされたアドレスに追加されるアドレス
      戻り値:
      このチャネル
      例外:
      ClosedChannelException - このチャネルがクローズしている場合
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      NotYetBoundException - このチャネルがまだバインドされていない場合
      AlreadyBoundException - このチャネルがすでに指定されたアドレスにバインドされている場合
      IllegalArgumentException - アドレスがnullまたはwildcardアドレスの場合
      IOException - その他の入出力エラーが発生した場合
    • unbindAddress

      public abstract SctpChannel unbindAddress​(InetAddress address) throws IOException
      指定されたアドレスをチャネルのソケットにバインドされているアドレスから削除します。

      指定されたアドレスは、ワイルドカード・アドレスであってはいけません。 このメソッドを呼び出す前に、まずbindを使用してチャネルをバインドする必要があります。そうしないと、NotYetBoundExceptionがスローされます。 バインドされたアドレスの1つとしてaddressが含まれないチャネルまたはバインドされているローカル・アドレスが1つしかないチャネルでこのメソッドが呼び出された場合はIllegalUnbindExceptionがスローされます。 bindを使用してチャネルのソケットがバインドされる初期アドレスは、チャネルのソケットにバインドされたアドレスから削除される可能性があります。

      接続されたアソシエーションからアドレスを削除することはオプションの機能です。 エンド・ポイントで動的なアドレス再構成がサポートされている場合は、ピア・アドレスのリストを変更するために、適切なメッセージがピアに送信されることがあります。

      パラメータ:
      address - ソケットにバインドされたアドレスから削除されるアドレス
      戻り値:
      このチャネル
      例外:
      ClosedChannelException - このチャネルがクローズしている場合
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      NotYetBoundException - このチャネルがまだバインドされていない場合
      IllegalArgumentException - アドレスがnullまたはwildcardアドレスの場合
      IllegalUnbindException - addressがチャネルのソケットにバインドされていない場合、またはチャネルにバインドされたアドレスが1つのみである場合
      IOException - その他の入出力エラーが発生した場合
    • connect

      public abstract boolean connect​(SocketAddress remote) throws IOException
      このチャネルのソケットを接続します。

      このチャネルが非ブロック・モードの場合、このメソッドの呼出しにより、非ブロック接続操作が開始されます。 ローカル接続の場合のように即座に接続が確立される場合、このメソッドはtrueを返します。 それ以外の場合はfalseを返し、あとでfinishConnectメソッドを呼び出すことにより、接続操作を完了する必要があります。

      このチャネルがブロック・モードの場合、このメソッドの呼出しは、接続が確立されるか入出力エラーが発生するまでブロックされます。

      セキュリティ・マネージャがインストールされている場合、このメソッドは、そのcheckConnectメソッドが指定されたリモート・ピアのアドレスおよびポート番号への接続を許可することを確認します。

      このメソッドはいつでも呼び出すことができます。 このメソッドを呼び出している途中でこのチャネルに対するsendまたはreceive操作を呼び出した場合、最初の呼出しが完了するまで次の呼出しはブロックされます。 接続しようとしたが失敗した場合、つまりこのメソッドの呼出しがチェック例外をスローする場合、チャネルはクローズされます。

      パラメータ:
      remote - このチャネルの接続先リモート・ピア
      戻り値:
      接続が確立された場合はtrue、このチャネルが非ブロック・モードで接続操作の実行中である場合はfalse
      例外:
      AlreadyConnectedException - このチャネルがすでに接続されている場合
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      UnresolvedAddressException - 指定されたリモート・アドレスが完全に解決されない場合
      UnsupportedAddressTypeException - 指定されたリモート・アドレスのタイプがサポート対象外の場合
      SecurityException - セキュリティ・マネージャがインストールされていて、指定されたリモート・ピアへのアクセスが許可されていない場合
      IOException - その他の入出力エラーが発生した場合
    • connect

      public abstract boolean connect​(SocketAddress remote, int maxOutStreams, int maxInStreams) throws IOException
      このチャネルのソケットを接続します。

      これは簡易メソッドであり、次の式の評価と等価です。

       setOption(SctpStandardSocketOptions.SCTP_INIT_MAXSTREAMS, SctpStandardSocketOption.InitMaxStreams.create(maxInStreams, maxOutStreams))
        .connect(remote);
       

      maxOutStreamsおよびmaxInStreamsパラメータは、アプリケーションで送受信できることを予定するストリームの最大数を表します。 これらはリモート・ピアとネゴシエーションされますが、オペレーティング・システムにより制限されることがあります。

      パラメータ:
      remote - このチャネルの接続先リモート・ピア
      maxOutStreams - 65536以下の正の値にする必要があります(エンド・ポイントのデフォルト値を使用する場合は0)。
      maxInStreams - 65536以下の正の値にする必要があります(エンド・ポイントのデフォルト値を使用する場合は0)。
      戻り値:
      接続が確立された場合はtrue、このチャネルが非ブロック・モードで接続操作の実行中である場合はfalse
      例外:
      AlreadyConnectedException - このチャネルがすでに接続されている場合
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      UnresolvedAddressException - 指定されたリモート・アドレスが完全に解決されない場合
      UnsupportedAddressTypeException - 指定されたリモート・アドレスのタイプがサポート対象外の場合
      SecurityException - セキュリティ・マネージャがインストールされていて、指定されたリモート・ピアへのアクセスが許可されていない場合
      IOException - その他の入出力エラーが発生した場合
    • isConnectionPending

      public abstract boolean isConnectionPending()
      このチャネル上で接続操作が進行中かどうかを判断します。
      戻り値:
      このチャネル上で接続操作が開始されていて、finishConnect()メソッドを呼び出すことによってまだ完了していない場合にかぎりtrue
    • finishConnect

      public abstract boolean finishConnect() throws IOException
      SCTPチャネルの接続処理を完了します。

      ソケット・チャネルを非ブロック・モードにし、そのconnectメソッドの1つを呼び出すと、非ブロック接続操作が開始されます。 接続が確立されるか、接続に失敗したあと、チャネルは接続可能な状態になり、接続シーケンスを完了するために、このメソッドを呼び出すことができます。 接続操作に失敗した場合、このメソッドを呼び出すと適切なIOExceptionがスローされます。

      このチャネルがすでに接続されている場合、このメソッドはブロックされ、ただちにtrueを返します。 このチャネルが非ブロック・モードの場合、接続処理がまだ完了していなければ、このメソッドはfalseを返します。 このチャネルがブロック・モードの場合、接続が完了するか失敗するまでこのメソッドはブロックされます。なお、接続が完了した場合はtrueが返され、接続に失敗した場合はチェック例外がスローされます。

      このメソッドはいつでも呼び出すことができます。 このメソッドを呼び出している途中でこのチャネルに対するsendまたはreceive操作を呼び出した場合、最初の呼出しが完了するまで次の呼出しはブロックされます。 接続しようとしたが失敗した場合、つまりこのメソッドの呼出しがチェック例外をスローする場合、チャネルはクローズされます。

      戻り値:
      このチャネルのソケットが接続されている場合にかぎりtrue
      例外:
      NoConnectionPendingException - このチャネルが接続されておらず、接続操作も開始されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      IOException - その他の入出力エラーが発生した場合
    • getAllLocalAddresses

      public abstract Set<SocketAddress> getAllLocalAddresses() throws IOException
      このチャネルのソケットがバインドされているすべてのソケット・アドレスを返します。
      戻り値:
      このチャネルのソケットがバインドされているすべてのソケット・アドレス、チャネルのソケットがバインドされていない場合は空のSet
      例外:
      ClosedChannelException - チャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合
    • getRemoteAddresses

      public abstract Set<SocketAddress> getRemoteAddresses() throws IOException
      このチャネルのソケットが接続されているすべてのリモート・アドレスを返します。

      チャネルが複数のアドレスにバインドされているリモート・ピアに接続する場合、これらのアドレスがチャネルのソケットが接続されるアドレスになります。

      戻り値:
      このチャネルのソケットが接続されているすべてのリモート・アドレス、チャネルのソケットが接続されていない場合は空のSet
      例外:
      ClosedChannelException - チャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合
    • shutdown

      public abstract SctpChannel shutdown() throws IOException
      チャネルを閉じずに接続を停止します。

      shutdownコマンドをリモート・ピアに送信することで、いずれかのピアによってあらゆる新しいデータがソケットに書き込まれることを事実上防ぎます。 さらに送信すると、ClosedChannelExceptionがスローされます。 チャネルはオープンされたままであるため、shutdownコマンドの受信前にピアが送信した可能性のあるデータ(および通知)はすべて受信できます。 チャネルがすでに停止している状態でこのメソッドを呼び出しても、何の効果もありません。

      戻り値:
      このチャネル
      例外:
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - その他の入出力エラーが発生した場合
    • getOption

      public abstract <T> T getOption​(SctpSocketOption<T> name) throws IOException
      ソケット・オプションの値を返します。
      型パラメータ:
      T - ソケット・オプション値のタイプ
      パラメータ:
      name - ソケット・オプション
      戻り値:
      ソケット・オプションの値。 一部のソケット・オプションに対しては、nullの値が有効な値である場合があります。
      例外:
      UnsupportedOperationException - チャネルがソケット・オプションをサポートしていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合
      関連項目:
      SctpStandardSocketOptions
    • setOption

      public abstract <T> SctpChannel setOption​(SctpSocketOption<T> name, T value) throws IOException
      ソケット・オプションの値を設定します。
      型パラメータ:
      T - ソケット・オプション値のタイプ
      パラメータ:
      name - ソケット・オプション
      value - ソケット・オプションの値。 一部のソケット・オプションに対しては、nullの値が有効な値である場合があります。
      戻り値:
      このチャネル
      例外:
      UnsupportedOperationException - チャネルがソケット・オプションをサポートしていない場合
      IllegalArgumentException - 値がこのソケット・オプションに対して有効な値でない場合
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合
      関連項目:
      SctpStandardSocketOptions
    • supportedOptions

      public abstract Set<SctpSocketOption<?>> supportedOptions()
      このチャネルがサポートするソケット・オプションのセットを返します。

      このメソッドは、チャネルが閉じられたあとでも引き続きオプションのセットを返します。

      戻り値:
      このチャネルでサポートされるソケット・オプションのセット
    • validOps

      public final int validOps()
      このチャネルのサポートされている操作を識別する操作セットを返します。

      SCTPチャネルは、接続、読み込み、書込みをサポートするため、このメソッドは(SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE)を返します。

      定義:
      validOps 、クラス:  SelectableChannel
      戻り値:
      有効な操作セット
    • receive

      public abstract <T> MessageInfo receive​(ByteBuffer dst, T attachment, NotificationHandler<T> handler) throws IOException
      指定されたバッファへのメッセージを受信するか、通知を処理します(あるいはその両方を行います)。

      メッセージまたは通知をすぐに使用できる場合、またはこのチャネルがブロック・モードで動作していて、最終的に使用可能になる場合は、そのメッセージが返されるか、通知が処理されます。 このチャネルが非ブロック・モードで動作していて、メッセージまたは通知をすぐに使用できない場合は、このメソッドはただちにnullを返します。

      このメソッドがメッセージを受け取ると、そのメッセージは指定されたbyteバッファにコピーされます。 メッセージは指定されたbyteバッファの現在位置に転送され、バッファの位置は読み取られたバイト数だけ増分されます。 バッファ内に残っているバイト数がメッセージの格納に必要なバイト数より少ない場合や、基本となる入力バッファに完全なメッセージが含まれていない場合は、返された MessageInfoisCompleteを呼び出すとfalseが返されます。メッセージを完全に処理するには、このメソッドをさらに呼び出す必要があります。 どのストリームでも、一度に1つのメッセージが部分的に配信されるのみです。 ソケット・オプションSCTP_FRAGMENT_INTERLEAVEは、メッセージのインタレースが発生する様々な側面を制御します。

      このメソッドが通知を受信した場合は、指定されたハンドラの適切なメソッド(存在する場合)が呼び出されます。 ハンドラでCONTINUEが返された場合、このメソッドは別のメッセージまたは通知を受信しようとします。RETURNが返された場合、このメソッドは nullを返します。 ハンドラでキャッチされない例外がスローされた場合は、その例外がこのメソッドからスタックまで伝播されます。

      このメソッドはいつでも呼び出すことができます。 別のスレッドがこのチャネルに対して受信操作をすでに開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。 前述の同期ポリシーを強制するために使用されるロックを保持せずに、指定されたハンドラが呼び出された場合は、ハンドラによる他のスレッドの受信が停止されません。 ハンドラは、このチャネルのreceiveメソッドを呼び出すことはできません。呼び出した場合は、IllegalReceiveExceptionがスローされます。

      型パラメータ:
      T - 接続の型
      パラメータ:
      dst - メッセージのバイトの転送先バッファ
      attachment - 受信操作に接続されるオブジェクト。次も可: null
      handler - SCTPスタックからの通知を処理するハンドラ、通知を無視する場合は null
      戻り値:
      MessageInfo、このチャネルが非ブロック・モードで動作していて、メッセージがすぐに使用できない場合、または通知が処理されたあとに通知ハンドラがRETURNを返した場合はnull
      例外:
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      IllegalReceiveException - 指定されたハンドラでこのチャネルのreceiveメソッドが呼び出される場合
      IOException - その他の入出力エラーが発生した場合
    • send

      public abstract int send​(ByteBuffer src, MessageInfo messageInfo) throws IOException
      このチャネル経由でメッセージを送信します。

      チャネルの動作モードが非ブロック・モードで基になる出力バッファの容量が十分である場合や、動作モードがブロック・モードで十分な容量がある場合、指定されたbyteバッファ内に残っているバイトは単一のメッセージとして転送されます。 このチャネルのソケットで明示的なメッセージの完了SCTP_EXPLICIT_COMPLETEソケット・オプションが有効になっていなければ、メッセージの送信はアトミックです。

      メッセージは、通常のwrite操作を実行した場合と同様に、byteバッファから転送されます。

      バイトは、指定された messageInfostreamNumberで指定されているストリーム番号に書き込まれます。

      このメソッドはいつでも呼び出すことができます。 別のスレッドがこのチャネルに対して送信操作をすでに開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。

      パラメータ:
      src - 送信されるメッセージを含むバッファ
      messageInfo - 送信されるメッセージに関する補助データ
      戻り値:
      送信バイト数(このメソッドを呼び出したときにメッセージ・バッファ内に残っていたバイト数)。このチャネルが非ブロック・モードで動作しており、基準となる出力バッファの容量が不十分なためメッセージが収まりきらない場合はゼロ
      例外:
      InvalidStreamException - streamNumnerが負の値である場合、またはそれが出力ストリームの最大数に等しいか、それよりも大きい場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      IOException - その他の入出力エラーが発生した場合