zoukankan      html  css  js  c++  java
  • 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。这里需要加一个判断,来关闭服务器端通道。

  • 相关阅读:
    zookeeper C API
    《accelerated c++》第九章---设计类
    redis memcache 比较
    redis 学习记录
    php memcache 使用学习
    php新手需要注意的高效率编程
    linux常用命令
    curl和file_get_contents 区别以及各自的优劣
    php序列化问题
    socket编程 123
  • 原文地址:https://www.cnblogs.com/Jtianlin/p/4526220.html
Copyright © 2011-2022 走看看