多線程N(yùn)IO客戶端實例
作者:ReFly 
  本文只給出了多線程N(yùn)IO客戶端的代碼實例。
 
- package night;
 - import java.net .InetSocketAddress;
 - import java.io .IOException;
 - import java.io .BufferedReader;
 - import java.io .InputStreamReader;
 - import java.nio.ByteBuffer;
 - import java.nio.channels .SocketChannel;
 - import java.nio.channels.*;
 - public class Kfd extends Thread {
 - /**
 - * @param args
 - */
 - public static void main(String[] args) {
 - // TODO Auto-generated method stub
 - new Kfd();
 - System.out.println("請輸入:");
 - }
 - static SocketChannel sc;
 - String host="127.0.0.1";
 - int port=10000;
 - ByteBuffer readbuf =ByteBuffer.allocate(1024);
 - ByteBuffer writebuf=ByteBuffer.allocate(1024);
 - InetSocketAddress ad=new InetSocketAddress(host,port);
 - public Kfd (){
 - start();
 - try {sc=SocketChannel.open();
 - Selector sl=Selector.open();
 - sc.configureBlocking(false);
 - //連接到server;
 - sc.connect(ad);
 - System.out.println("客服端連接成功");
 - if(!sc.finishConnect()){
 - System.out.print("客戶端連接失敗");
 - }
 - } catch (Exception e) {
 - // TODO: handle exception
 - e.printStackTrace();
 - }
 - }
 - public void run() {
 - while(true){
 - try {
 - BufferedReader buf=
 - new BufferedReader
 - (new InputStreamReader(System.in));
 - String str =buf.readLine();
 - byte[]pack=str.getBytes();
 - writebuf.clear();
 - writebuf.put(pack);
 - writebuf.flip();
 - System.out.println("到這里");
 - //發(fā)送
 - send(sc);
 - //接受
 - recive(sc);
 - }
 - catch (Exception e) {
 - // TODO: handle exception
 - e.printStackTrace();
 - }
 - }
 - }
 - private void recive(SocketChannel sc)throws IOException{
 - while(true){
 - if(sc.isConnectionPending()){
 - sc.read(readbuf);
 - }
 - readbuf.flip();
 - byte[]pack=null;
 - pack=new byte[readbuf.limit()];
 - //將緩沖的數(shù)據(jù)打包到數(shù)組中
 - readbuf.get(pack);
 - System.out.println(new String(pack.toString()));
 - }
 - }
 - private void send(SocketChannel sc){
 - while(true){
 - while(writebuf.hasRemaining()){
 - try {
 - sc.write(writebuf);
 - } catch (Exception e) {
 - // TODO: handle exception
 - e.printStackTrace();
 - }
 - }
 - }
 - }
 - }
 
原文鏈接:http://refly.iteye.com/blog/1053152
【編輯推薦】
責(zé)任編輯:林師授 
                    來源:
                    ReFly的博客
 














 
 
 
 
 
 
 