Java AIO 入门实例(转)

Java7 AIO入门实例,首先是服务端实现:

服务端代码

SimpleServer:

public class SimpleServer {  
  
    public SimpleServer(int port) throws IOException {  
        final AsynchronousServerSocketChannel listener = AsynchronousServerSocketChannel.open().bind(new InetSocketAddress(port));  
  
        listener.accept(null, new CompletionHandler<AsynchronousSocketChannel, Void>() {  
            public void completed(AsynchronousSocketChannel ch, Void att) {  
                // 接受下一个连接  
                listener.accept(null, this);  
  
                // 处理当前连接  
                handle(ch);  
            }  
  
            public void failed(Throwable exc, Void att) {  
  
            }  
        });  
  
    }  
  
    public void handle(AsynchronousSocketChannel ch) {  
        ByteBuffer byteBuffer = ByteBuffer.allocate(32);  
        try {  
            ch.read(byteBuffer).get();  
        } catch (InterruptedException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (ExecutionException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        byteBuffer.flip();  
        System.out.println(byteBuffer.get());  
        // Do something  
    }  
      
}  

 

跟着是客户端实现:
客户端代码

SimpleClient:

public class SimpleClient {  
      
    private AsynchronousSocketChannel client;  
      
    public SimpleClient(String host, int port) throws IOException, InterruptedException, ExecutionException {  
        this.client = AsynchronousSocketChannel.open();  
        Future<?> future = client.connect(new InetSocketAddress(host, port));  
        future.get();  
    }  
      
    public void write(byte b) {  
        ByteBuffer byteBuffer = ByteBuffer.allocate(32);  
        byteBuffer.put(b);  
        byteBuffer.flip();  
        client.write(byteBuffer);  
    }  
  
}  

写一个简单的测试用例来跑服务端和客户端,先运行testServer(),在运行testClient();

测试用例

AIOTest

public class AIOTest {  
      
    @Test  
    public void testServer() throws IOException, InterruptedException {  
        SimpleServer server = new SimpleServer(7788);  
          
        Thread.sleep(10000);  
    }  
      
    @Test  
    public void testClient() throws IOException, InterruptedException, ExecutionException {  
        SimpleClient client = new SimpleClient("localhost", 7788);  
        client.write((byte) 11);  
    }  
  
}  

因为是异步的,所以在运行server的时候没有发生同步阻塞,在这里我加了一个线程sleep(),如果没有的话,程序会直接跑完回收掉。

http://tigerlchen.iteye.com/blog/1747221

 

posted @ 2015-06-14 21:46  沧海一滴  阅读(1018)  评论(1编辑  收藏  举报