NIO的简单实现(非阻塞型IO)

1:NIO通道客户端的实现步骤

1,SocketChannel打开通道
2,connect连接指定的IP和端口号
3,写入数据
4,关闭通道释放资源

public static void main(String[] args) throws IOException {
        SocketChannel open=SocketChannel.open();
        open.connect(new InetSocketAddress("192.168.1.46",9999));
//写入数据
        ByteBuffer byteBuffer=ByteBuffer.wrap("yyds".getBytes());
        open.write(byteBuffer);
        open.shutdownOutput();
//接收服务端的信息
        ByteBuffer byteBuffer2=ByteBuffer.allocate(1024);
        int len;
        while ((len=open.read(byteBuffer2))!=-1){
            byteBuffer2.flip();
            System.out.println(new String(byteBuffer2.array(),0,len));
            byteBuffer2.clear();
        }
//关闭通道释放资源
        open.close();
    }

2:NIO通道服务端的实现步骤

1,ServerSocketChannel打开服务器通道
2,bind方法绑定对应的端口号
3,将通道设置为非阻塞
4,经常查看是否有客户端连接
5,接收到客户端连接后,创建客户端通道的延伸
6,获取客户端传输的数据,放在缓冲区中
7,通知客户端收到数据,然后释放资源

public static void main(String[] args) throws IOException {
        ServerSocketChannel server=ServerSocketChannel.open();
        server.bind(new InetSocketAddress(9999));
        server.configureBlocking(false);//将通道设为非阻塞

        while (true) {
            SocketChannel accept = server.accept();
            //检查是否有客户端连接,如果没有就跳过本次循环
            if(accept==null){
                continue;
            }
            accept.configureBlocking(false);
            ByteBuffer buffer = ByteBuffer.allocate(1024);
			//创建缓冲区存储数据
            int len;
            while ((len = accept.read(buffer)) != -1) {
                buffer.flip();
                System.out.println(new String(buffer.array(), 0, len));
                buffer.clear();
            }
			//向客户端发送通知
            ByteBuffer byteBuffer = ByteBuffer.wrap("papapa".getBytes());
            accept.write(byteBuffer);
            accept.shutdownOutput();

            accept.close();
            
        }
    }

先启动服务端,再启动客户端,控制台输出结果
在这里插入图片描述
在这里插入图片描述


版权声明:本文为ayaYoumu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。