• NIO 03


    1. 客户端要主动去连接:channel.connect(new InetSocketAddress("localhost",8888)); //用channel.finishConnect();才能完成连接

    2. 客户端的阻塞配置放到连接前面:socketClient.configureBlocking(false);

    3. 客户端连接成功以后要断开连接:

        // 如果正在连接,则完成连接

        if(channel.isConnectionPending()){

              channel.finishConnect();

        }

    4. 往通道里写数据:channel.write(ByteBuffer.wrap(new String("向服务端发送了一条信息").getBytes())); 从通道里读数据:channel.read(buffer);

    5. 客户端调用:channel.close(), 服务端从channel中读取数据返回值为-1。

        如果强制关闭客户端,服务器端会报异常:java.io.IOException: 远程主机强迫关闭了一个现有的连接。需要对服务器端通道做关闭处理,否则会一直异常。

    6. 判断连接的类型:key.isConnectable(),key.isReadable(),key.isAcceptable()

    8. java.io.IOException: 远程主机强迫关闭了一个现有的连接。

        出现该异常的原因是因为:客户端没有调用close,直接关闭了通道,导致服务器端的连接通道依旧处于可读状态,但却无法读取数据,所以报IO异常。

        这里需要加一个异常捕获,在捕获到异常后,服务器端应该主动关闭通道连接。

        参考:http://blog.csdn.net/abc_key/article/details/29295569

    9. 当客户端通道调用close()方法关闭通道的时候,服务端从通道读取获取的值为:-1。这里需要加一个判断,来关闭服务器端通道。

  • 相关阅读:
    pymysql模块的简单操作
    day21--继承--派生
    subprocess模式,re模式,logging模块, 防止测试自动执行, 包的理论
    前端知识
    Django框架
    jieba/word cloud
    python语法基础知识
    Vue框架——Vue指令
    Vue框架基础
    Django——静态文件配置和连接数据库
  • 原文地址:https://www.cnblogs.com/Jtianlin/p/4526220.html
Copyright © 2020-2023  润新知