码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA aio简单使用

时间:2019-10-06 14:56:21      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:generated   on()   rgs   executors   soc   socket   oid   completed   cut   

使用aio,实现客户端和服务器 对一个数进行轮流累加

//服务器端
public class Server {
    private static ExecutorService executorService = Executors.newFixedThreadPool(4);
    public static void main(String[] args) {
        try {
            AsynchronousChannelGroup group=AsynchronousChannelGroup.withThreadPool(executorService);
            AsynchronousServerSocketChannel server=AsynchronousServerSocketChannel.open(group);
            server.bind(new InetSocketAddress(8881));
            server.accept(null, new CompletionHandler<AsynchronousSocketChannel, Object>() {

                @Override
                public void completed(AsynchronousSocketChannel client, Object attachment) {
                    server.accept(null, this);
                    try {
                        System.out.println("服务器收到客户端"+client.getRemoteAddress().toString());
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    ByteBuffer buffer=ByteBuffer.allocate(1024);
                    client.read(buffer, buffer, new CompletionHandler<Integer, ByteBuffer>() {

                        @Override
                        public void completed(Integer index, ByteBuffer buffer) {
                            try {
                            buffer.flip();
                            int i=buffer.getInt(0);
                            System.out.println(Thread.currentThread().getName()+" 服务器收到客户端消息"+client.getRemoteAddress().toString()+ "   "+i);
                            buffer.putInt(0, i+1);
                            client.write(buffer).get();//这个是异步的,一定要用get 确保执行结束 才能clear
                            buffer.clear(); 
                            client.read(buffer,buffer,this);
                            }catch (Exception e) {
                                e.printStackTrace();
                            }
                        }

                        @Override
                        public void failed(Throwable exc, ByteBuffer attachment) {
                            throw new RuntimeException(exc.getMessage());
                            
                        }
                    });
                    
                }

                @Override
                public void failed(Throwable exc, Object attachment) {
                    throw new RuntimeException(exc.getMessage());
                    
                }
                
            });
            while(true) {
                Thread.sleep(2000);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
//客户端
public class Client {
    public static void main(String[] args) {
        try {
            AsynchronousSocketChannel client=AsynchronousSocketChannel.open();
            client.connect(new InetSocketAddress("127.0.0.1", 8881), null, new CompletionHandler<Void, Object>() {

                @Override
                public void completed(Void result, Object attachment) {
                    System.out.println("连接服务器成功");
                    ByteBuffer buffer=ByteBuffer.allocate(1024);
                    buffer.putInt(0,1);
                    try {
                        client.write(buffer).get();
                    } catch (InterruptedException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    } catch (ExecutionException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    buffer.clear();
                    client.read(buffer, buffer, new CompletionHandler<Integer, ByteBuffer>() {

                        @Override
                        public void completed(Integer result, ByteBuffer buffer) {
                            try {
                                //System.out.println("result="+result+" postition="+buffer.position()+" limit="+buffer.limit());
                                buffer.flip();
                                int i=buffer.getInt(0);
                                System.out.println("客户端收到服务器返回的消息"+client.getRemoteAddress().toString()+" "+i);
                                buffer.putInt(0, i+1);
                                Thread.sleep(2000);
                                client.write(buffer).get();
                                buffer.clear();
                                client.read(buffer, buffer, this);
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (ExecutionException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            
                        }

                        @Override
                        public void failed(Throwable exc, ByteBuffer attachment) {
                            throw new RuntimeException(exc.getMessage());
                            
                        }
                    });
                    
                }

                @Override
                public void failed(Throwable exc, Object attachment) {
                    throw new RuntimeException(exc.getMessage());
                }
            });
            while(true) {
                Thread.sleep(2000);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

JAVA aio简单使用

标签:generated   on()   rgs   executors   soc   socket   oid   completed   cut   

原文地址:https://www.cnblogs.com/duangL/p/11627243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!