美文网首页
基于 AIO 实现非阻塞的聊天室

基于 AIO 实现非阻塞的聊天室

作者: 丶沧月 | 来源:发表于2019-03-10 23:58 被阅读0次

    复习 AIO 写的小 Demo
    涉及到两个核心类:1. AsynchronousServerSocketChannel 2. AsynchronousSocketChannel

    服务端

    public class SimpleAIOServer
    {
        static final int PORT = 30000;
        public static void main(String[] args)
            throws Exception
        {
            try(
                // ①创建AsynchronousServerSocketChannel对象。
                AsynchronousServerSocketChannel serverChannel =
                    AsynchronousServerSocketChannel.open())
            {
                // ②指定在指定地址、端口监听。
                serverChannel.bind(new InetSocketAddress(PORT));
                while (true)
                {
                    // ③采用循环接受来自客户端的连接
                    Future<AsynchronousSocketChannel> future
                        = serverChannel.accept();
                    // 获取连接完成后返回的AsynchronousSocketChannel
                    AsynchronousSocketChannel socketChannel = future.get();
                    // 执行输出。
                    socketChannel.write(ByteBuffer.wrap("欢迎你来自AIO的世界!"
                        .getBytes("UTF-8"))).get();
                }
            }
        }
    }
    

    客户端

    public class SimpleAIOClient
    {
        static final int PORT = 30000;
        public static void main(String[] args)
            throws Exception
        {
            // 用于读取数据的ByteBuffer。
            ByteBuffer buff = ByteBuffer.allocate(1024);
            Charset utf = Charset.forName("utf-8");
            try(
                // ①创建AsynchronousSocketChannel对象
                AsynchronousSocketChannel clientChannel
                    = AsynchronousSocketChannel.open())
            {
                // ②连接远程服务器
                clientChannel.connect(new InetSocketAddress("127.0.0.1", PORT)).get();     // ④
                buff.clear();
                // ③从clientChannel中读取数据
                clientChannel.read(buff).get();     // ⑤
                buff.flip();
                // 将buff中内容转换为字符串
                String content = utf.decode(buff).toString();
                System.out.println("服务器信息:" + content);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:基于 AIO 实现非阻塞的聊天室

          本文链接:https://www.haomeiwen.com/subject/rdcmpqtx.html