首页 > 其他分享 >AIO 简单代码示例

AIO 简单代码示例

时间:2024-02-27 10:26:48浏览次数:22  
标签:代码 Exception java 示例 void AIO new import public

客户端代码

package test;

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.CompletionHandler;

public class AIOClient {
    private final AsynchronousSocketChannel client;

    public AIOClient() throws Exception {
        client = AsynchronousSocketChannel.open();
    }

    public void start() throws Exception {
        client.connect(new InetSocketAddress("127.0.0.1", 8800), null, new CompletionHandler<Void, Object>() {
            @Override
            public void completed(Void result, Object attachment) {
                try{
                    client.write(ByteBuffer.wrap("Hello".getBytes())).get();
                }catch (Exception ex){
                    ex.printStackTrace();
                }
            }

            @Override
            public void failed(Throwable exc, Object attachment) {
                exc.printStackTrace();
            }
        });

        final ByteBuffer byteBuffer = ByteBuffer.allocate(5);
        client.read(byteBuffer, null, new CompletionHandler<Integer, Object>() {
            @Override
            public void completed(Integer result, Object attachment) {
                System.out.println(result);
                System.out.println(new String(byteBuffer.array()));
            }

            @Override
            public void failed(Throwable exc, Object attachment) {
                exc.printStackTrace();
            }
        });

        try{
            Thread.sleep(Integer.MAX_VALUE);
        }catch (Exception exception){
            exception.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception{
        new AIOClient().start();
    }
}

服务端代码

package test;

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousServerSocketChannel;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.CompletionHandler;

public class AIOServer {
    private void listen(int port) {
        try (AsynchronousServerSocketChannel server = AsynchronousServerSocketChannel.open()) {
            server.bind(new InetSocketAddress(port));
            System.out.println("Server is listening on " + port);
            ByteBuffer buff = ByteBuffer.allocateDirect(5);
            server.accept(null, new CompletionHandler<AsynchronousSocketChannel, Object>() {
                @Override
                public void completed(AsynchronousSocketChannel result, Object attachment) {
                    try {
                        buff.clear();
                        result.read(buff).get();
                        buff.flip();
                        // 把发过来的消息再返回回去
                        result.write(buff);
                        buff.flip();
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    } finally {
                        try {
                            result.close();
                            ;
                            server.close();
                        } catch (Exception exception) {
                            exception.printStackTrace();
                        }
                    }
                }

                @Override
                public void failed(Throwable exc, Object attachment) {
                    System.out.println("Server failed: " + exc);
                }
            });

            try {
                Thread.sleep(Integer.MAX_VALUE);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

    public static void main(String[] args){
        int port = 8800;
        AIOServer s = new AIOServer();
        s.listen(port);
    }
}

标签:代码,Exception,java,示例,void,AIO,new,import,public
From: https://www.cnblogs.com/liu-im/p/18036297

相关文章

  • NIO 交互简单示例
    客户端代码:packagetest;importjava.net.InetSocketAddress;importjava.nio.ByteBuffer;importjava.nio.channels.SocketChannel;publicclassClient{publicstaticvoidmain(String[]args){try(SocketChannelsocketChannel=SocketChannel.open()......
  • 最新Union注入攻击及代码分析技术
    Union注入攻击Union注入攻击的测试地址在本书第2章。访问该网址时,页面返回的结果如图4-12所示。  图4-12  在URL后添加一个单引号,即可再次访问。如图4-13所示,页面返回的结果与id=1的结果不同。   图4-13  访问id=1and1=1,由于and1=1为真,所以页面应返回......
  • 代码随想录算法训练营第二十九天| 491.递增子序列 46.全排列 47.全排列 II
    491.递增子序列题目链接:491.非递减子序列-力扣(LeetCode)思路:一开始一直报访问异常的错误,最后只好参考官网答案,结果竟然是因为我递归参数写错了导致程序一直出问题???(⊙︿⊙)这里去重用的是标记数组,可以用集合unordered_set,但由于本题数据范围比较小,所以我们可以用数组更加高效的......
  • 【机器学习科学库】全md文档笔记:Matplotlib详细使用方法(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论人工智能相关知识。主要内容包括,了解机器学习定义以及应用场景,掌握机器学习基础环境的安装和使用,掌握利用常用的科学计算库对数据进行展示、分析,学会使用jupyternotebook平台完成代码编写运行,应用Matplotlib的基本功能实现图形显示,应用Matplotlib......
  • day42 动态规划part4 代码随想录算法训练营 416. 分割等和子集
    题目:416.分割等和子集我的感悟:有点难,更快的解法用了01True和False所以更快理解难点:转化为背包问题听课笔记:代码示例:我优化了下classSolution:defcanPartition(self,nums:List[int])->bool:ifsum(nums)%2==1:returnFalse......
  • 代码随想录 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.0
    LeetCode:24.两两交换链表中的节点-力扣(LeetCode)思路:第一步:两两交换要考虑循环什么时候退出,当cur指针.next是null是就到尾部了,同理,链表不是奇数就是偶数,cur.next.next是空也是。第二步循环条件判断完了接下来要实现交换,如图所示,按步骤来就好,提前将1,2,3存好,接下来按图......
  • Java代码混淆工具:ProGuard
    前言java代码可以反编译,因此有时候要保护自己的知识产权还得费点心思,一般来说有三个思路:将class文件加密,这个是最安全的,但也费事儿,因为要重写classloader来解密class文件,Lombok库就是使用的这种方式(lombok.launch.ShadowClassLoader)。使用花指令,使得class文件不能反编译(利用......
  • day42 动态规划part4 代码随想录算法训练营 46. 携带研究材料- 一维数组写法
    题目:46.携带研究材料我的感悟:一维是二维的压缩理解难点:倒序遍历j因为每轮的数字是由左上决定的。遍历的时候,从右侧遍历,是不会影响左侧的。听课笔记:代码示例:defbag_problem(weight,value,bagWeight):#初始化dp=[0]*(bagWeight+1)fori......
  • Qt QML使用虚拟键盘示例(附完整源码)
    使用"虚拟键盘"注意(例子的Qt版本:5.12.4)注意一:     /*必须在main.cpp开始处加入如下代码,否则无法使用"虚拟键盘"*/     qputenv(“QT_IM_MODULE”,QByteArray(“qtvirtualkeyboard”)); 注意二:     键盘大小是根据宽度自动计算的,所以,应用程序应该只设置Inpu......
  • 【Django开发】0到1开发美多shop项目:用户登录模块开发。全md文档笔记(附代码 文档)
    本系列文章md笔记(已分享)主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django+Jinja2模板引擎+Vue.js实现前后端逻辑,Nginx服务器(反向代理)Nginx服务器(静态首页、商品详情页、uwsg......