Java NIO の ServerSocketChannel は、標準 IO の ServerSocket と同様に、新しい受信 TCP 接続を監視できるチャネルです。 ServerSocketChannel クラスは java.nio.channels パッケージにあります。
ServerSocketChannel.open() メソッドを呼び出して ServerSocketChannel を開きます。
ServerSocketChannel.close() メソッドを呼び出して ServerSocketChannel を閉じます
ServerSocketC。 hannel.accept() メソッドがリッスンします新しい着信接続の場合。 accept() メソッドが戻ると、新しい受信接続を含む SocketChannel が返されます。したがって、accept() メソッドは、新しい接続が到着するまでブロックされます。
通常、while ループ内で 1 つの接続をリッスンして accept() メソッドを呼び出すだけではありません
もちろん、while ループ内で true 以外の他の終了基準を使用することもできます。
ServerSocketChannelはノンブロッキングモードに設定できます。非ブロッキング モードでは、新しい受信接続がない場合、accept() メソッドはすぐに戻り値は null になります。 したがって、返された SocketChannel が null かどうかを確認する必要があります。例:
/** * socket server channel */@Testpublic void text2() throws IOException { ServerSocketChannel channel = ServerSocketChannel.open(); //新建channelchannel.socket().bind(new InetSocketAddress(9999)); //监听端口channel.configureBlocking(true); //设置阻塞while (true) { SocketChannel accept = channel.accept(); //设置为阻塞,则此方法阻塞,直到有连接//如果设置为非阻塞,需要在这里判断 accept == null?ByteBuffer byteBuffer = ByteBuffer.allocate(1024); accept.read(byteBuffer); byteBuffer.flip(); //反转while (byteBuffer.hasRemaining()) { //判断System.err.println((char)byteBuffer.get()); //输出 } } }
SocketChannel は、TCP ネットワークソケットに接続されているチャネルです。 SocketChannel は次の 2 つの方法で作成できます:
SocketChannel を開き、インターネット上のサーバーに接続します。
新しい接続が ServerSocketChannel に到着すると、SocketChannel が作成されます。 E ソケットチャネルを開きます
ソケットチャネルを使用する場合、socketChannel.close()を呼び出してソケットチャネルを閉じます:
まず、バッファを割り当てます。 SocketChannel から読み取られたデータは、このバッファーに配置されます。
SocketChannel への書き込み
SocketChannel へのデータの書き込みには、パラメーターとして Buffer を取る SocketChannel.write() メソッドが使用されます。
SocketChannel.write() メソッドが while ループで呼び出されることに注意してください。 Write() メソッドは、SocketChannel に書き込めるバイト数を保証できません。したがって、バッファに書き込むバイトがなくなるまで、 write() を繰り返し呼び出します。
SocketChannel をノンブロッキングモードに設定すると、非同期モードで connect()、read()、write() を呼び出すことができます。
connect()
ノンブロッキング モードでは、コンテンツが書き込まれる前に write() メソッドが返されることがあります。したがって、ループ内で write() を呼び出す必要があります。以前にも例がありましたので、ここでは詳しく説明しません。
ノンブロッキング モードとセレクター
りー
以上がJAVA-7NIOのソケット/サーバーソケットチャネルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。