3、NIO详解之服务端和客户端通信

本文深入探讨NIO在服务端和客户端通信中的应用,详细讲解了服务端如何获取ServerSocketChannel并注册到Selector,客户端如何获取SocketChannel并进行连接,以及双方如何进行信息交换。通过实例代码,帮助读者理解NIO的通信流程。
摘要由CSDN通过智能技术生成

前言

上一节,我们大致介绍了NIO的使用,现在利用一个客户端和服务端的代码重点看看

1、服务端和客户端的通道注册准备

1.1 服务端 、获取一个服务端的ServerSocketChannel通道并注册到Selector上

1、 SelectionKey设置为ServerSocketChannel准备好接收新连接
2、注意这里的通道是用的ServerSocketChannel

        serverChannel.register(selector, SelectionKey.OP_ACCEPT);

public class NIOServer {
    // 通道管理器
    private Selector selector;

    public void initServer(int port) throws Exception {
        // 获得一耳光通道管理器
        this.selector = Selector.open();

        // 获得一个ServerSocket通道
        ServerSocketChannel serverChannel = ServerSocketChannel.open();
        // 设置通道为 非阻塞
        serverChannel.configureBlocking(false);
        // 将该通道对于的serverSocket绑定到port端口
        serverChannel.socket().bind(new InetSocketAddress(port));

        // 将通道管理器和该通道绑定,并为该通道注册selectionKey.OP_ACCEPT事件
        // 注册该事件后,当事件到达的时候,selector.select()会返回,
        // 如果事件没有到达selector.select()会一直阻塞

        serverChannel.register(selector, SelectionKey.OP_ACCEPT);
    }
}

1.2、客户端 获取一个SocketChannel通道并注册到Selector上

1、SelectKey设置为连接
2、注意这里的通道是用的SocketChannel

channel.register(selector, SelectionKey.OP_CONNECT);

public class NIOClient {
   

    // 通道管理器
    private Selector selector;

    /**
     * * // 获得一个Socket通道,并对该通道做一些初始化的工作 * @param ip 连接的服务器的ip // * @param
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值