1.サーバー
輸入java.net.InetSocketAddress; インポートたjava.nio.ByteBuffer; 輸入いるjava.nio.channels *。; インポートするjava.util.Iterator; 輸入java.util.Set; パブリック クラスNIOServer { 公共 静的 ボイドメイン(文字列[]引数)がスロー例外{ // 1のServerSocketChannel作成 AのServerSocketChannelのServerSocketChannel = ServerSocketChannel.open(); // オブジェクトセレクタ作成 セレクタセレクタ= Selector.openを(); // ネクタイ聞くために、サーバー上のポートを与え serverSocketChannel.socket()バインド(新新たInetSocketAddress(8888 )); // 非ブロッキングに設定 serverSocketChannel.configureBlocking(偽); //セレクタに登録のServerSocketChannel、当該イベントOP_ACCEPT serverSocketChannel.register(セレクタ、SelectionKey.OP_ACCEPT)。 // クライアント接続を待ってループ しながら(真の){ IF(selector.select(1000)== 0){ // 1秒間のサーバ待ち、接続なし 1秒間のSystem.out.println(「サーバー待機、...コネクションを。 " ); 続行します。 } // イベント、とSelectionKeyのそこチャンネルのイベントを取得する 設定<とSelectionKey> selectedKeys = selector.selectedKeys(); // イベントチャネルとSelectionKeyにより取得された逆 イテレータ <とSelectionKey> keyIterator = selectedKeys.iterator(); 一方(keyIterator.hasNext()){ // イベントの発生とSelectionKeyを取得した後、対応するチャネルの種類が決定され、次いで別を行います処理 とSelectionKeyとSelectionKey = ; keyIterator.next() IF {(selectionKey.isAcceptable())// イベントが接続されている場合、接続する新しいクライアントを示す // クライアントのSocketChannelへの作成 のSocketChannelのSocketChannel = ServerSocketChannel.acceptを(); socketChannel.configureBlocking(偽); System.out.println(「クライアントの接続が成功すると、SocketChannelへの生成:」+ socketChannel.hashCode()); //は、セレクタにSocketChannelへの登録団体にのSocketChannelバッファ与えながら、興味のあるイベントは、OP_READある socketChannel.register(セレクタ、SelectionKey.OP_READ、ByteBuffer.allocate(1024 ))。 } IF(selectionKey.isReadable()){ // 読み出しイベント のSocketChannelのSocketChannel = (のSocketChannel)selectionKey.channel(); // 関連するチャネルのバッファを取得 ByteBufferのバッファ= (のByteBuffer)selectionKey.attachment(); // チャネルにデータは、バッファ読み取り socketChannel.read(バッファ)。 System.out.println( "クライアントデータが受信された:" + 新新しい文字列(buffer.array())); } // それ以外の場合は繰り返されます、コレクションから削除さとSelectionKey、処理後の keyIterator.removeを(); } } } }
2.クライアント
インポートにjava.io.IOException; 輸入java.net.InetSocketAddress; 輸入java.net.SocketAddress; インポートたjava.nio.ByteBuffer; 輸入java.nio.channels.SocketChannel; パブリック クラスNIOClient { 公共 静的 ボイドメイン(文字列[]引数)がスローにIOExceptionが{ // チャネル得 たSocketChannel =たSocketChannel SocketChannel.openを(); // セットノンブロッキングモード socketChannel.configureBlocking(偽の); // サービス終了IPおよび終了 のSocketAddressアドレス= 新しい新たInetSocketAddress(「127.0.0.1」、8888 )。 // 接続サーバ、接続を返す成功した場合はtrue、そうでない場合はfalseを返す ブール connectResult = SocketChannel.connect(アドレス); IF(!ConnectResultは){ // 接続が失敗し ながら、 {(socketChannel.finishConnect()!)// さらに接続の場合完了していない のSystem.out.printlnは(「接続に時間がかかるため、クライアントはブロックされません...他のことを行うことができます..」); } } // 成功した場合、送信データ 文字列データ=「Hello World」の。 ByteBufferのバッファ = ByteBuffer.wrap(data.getBytesを()); // 送信データ、データはバッファ・チャネルに書き込まれ socketChannel.write(バッファ)。 // プログラムを閉じてみましょう )(System.in.readを。 } }