博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[JAVA学习笔记-70]AIO handler form
阅读量:4098 次
发布时间:2019-05-25

本文共 1680 字,大约阅读时间需要 5 分钟。

// 创建AsynchronousServerSocketChannel监听特定端口,并设置回调AcceptCompletionHandler
AsynchronousServerSocketChannel serverSocketChannel = AsynchronousServerSocketChannel.open().bind(new InetSocketAddress(PORT));  
serverSocketChannel.accept(serverSocketChannel, new AcceptCompletionHandler());
// 监听回调,当用连接时会触发该回调
private static class AcceptCompletionHandler implements CompletionHandler<AsynchronousSocketChannel, AsynchronousServerSocketChannel> {  
    @Override
    public void completed(AsynchronousSocketChannel result, AsynchronousServerSocketChannel attachment) {
        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
        // 注册read请求以及回调ReadCompletionHandler
        result.read(byteBuffer, result, new ReadCompletionHandler(byteBuffer, "client"));
        // 递归监听
        attachment.accept(attachment, this);
    }
    @Override
    public void failed(Throwable exc, AsynchronousServerSocketChannel attachment) {
        // 递归监听
        attachment.accept(attachment, this);
    }
}
// 读取数据回调,当有数据可读时触发该回调
public class ReadCompletionHandler  implements CompletionHandler<Integer, AsynchronousSocketChannel> {  
    private ByteBuffer byteBuffer;
    private String remoteName;
    public ReadCompletionHandler(ByteBuffer byteBuffer, String remoteName) {
        this.byteBuffer = byteBuffer;
        this.remoteName = remoteName;
    }
    @Override
    public void completed(Integer result, AsynchronousSocketChannel attachment) {
        if (result <= 0)
            return;
        byteBuffer.flip();
        System.out.println("[" + this.remoteName + "] " + new String(byteBuffer.array()));
        byteBuffer.clear();
        // 递归监听数据
        attachment.read(byteBuffer, attachment, this);
    }
    @Override
    public void failed(Throwable exc, AsynchronousSocketChannel attachment) {
        byteBuffer.clear();
        // 递归监听数据
        attachment.read(byteBuffer, attachment, this);
    }
}

转载地址:http://iphii.baihongyu.com/

你可能感兴趣的文章
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
都无代码了,还要程序员吗?
查看>>
程序员:凭自己能力吃饭,有什么理由瞧不起?
查看>>
面试想拿 10K,HR 说我只配7k?
查看>>
副业过万的程序员都知道的网站有哪些
查看>>
那些人生“开挂”的程序员,都在干什么?
查看>>
影响科学圈的那些计算机代码
查看>>
乐视视频 App 图标改为“欠 122 亿”,网友:我在别家分红包,却在你家随份子!...
查看>>
乔布斯18岁求职信拍卖价22.24万美元,值吗?
查看>>
为何程序员总喜欢写技术博客,看完恍然大悟...
查看>>
假如计算机是中国人发明的,那代码应该这么写
查看>>
科技公司最爱的 50 款开源工具,你都用过吗?
查看>>
触目惊心:比特币到底消耗了多少能源?
查看>>
面试官:简历上敢写技术精通?那我就不客气了!
查看>>
如何判断一家互联网公司要倒闭了?
查看>>
想快速上手机器学习?来看下这个 GitHub 项目!
查看>>
GitHub 标星 3.6k,一本开源的深度学习中文教程!
查看>>
9 款你不能错过的 JSON 工具
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
200页!分享珍藏很久的Python学习知识手册(附链接)
查看>>