wengquanfei 2015-08-11 05:51 采纳率: 0%
浏览 5145

java nio 关闭客户端 服务器端的selector.select(TimeOut)方法不阻塞

代码如下:

    // 反复循环,等待IO  
    while (true) {
        // 等待某信道就绪(或超时)  
        if (selector.select(TimeOut) == 0) {// 监听注册通道,当其中有注册的 IO  
                                            // 操作可以进行时,该函数返回,并将对应的  
                                            // SelectionKey 加入 selected-key  
                                            // set
            log.info("服务器独自等待.");
            continue;
        }

        // 取得迭代器.selectedKeys()中包含了每个准备好某一I/O操作的信道的SelectionKey  
        // Selected-key Iterator 代表了所有通过 select() 方法监测到可以进行 IO 操作的 channel  
        // ,这个集合可以通过 selectedKeys() 拿到  
        Iterator<SelectionKey> keyIter = selector.selectedKeys().iterator();
        while (keyIter.hasNext()) {
            SelectionKey key = keyIter.next();

            try {  
                if (key.isAcceptable()) {
                    // 有客户端连接请求时  
                    protocol.handleAccept(key);
                }  
                if (key.isReadable()) {// 判断是否有数据发送过来  
                    // 从客户端读取数据  
                    protocol.handleRead(key);
                }  
                if (key.isValid() && key.isWritable()) {// 判断是否有效及可以发送给客户端  
                    // 客户端可写时  
                    protocol.handleWrite(key);
                }  
            } catch (IOException ex) {  
                // 出现IO异常(如客户端断开连接)时移除处理过的键 
                log.error("IO异常(如客户端断开连接)", ex);
                keyIter.remove();
                continue;
            }  
            // 移除处理过的键  
            keyIter.remove();
        }
    }

奇怪的现象是,我关闭了客户端后,这个keyIter里面一直会有一个read的key存在,按说客户端关闭了应该阻塞了,很奇怪。

  • 写回答

4条回答 默认 最新

  • fy920411 2016-09-28 10:10
    关注

    求解啊,这个要怎么判断nio客户端是关闭连接的动作,不然server一直输出空信息

    评论

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?