JAVA NIO写服务端判断客户端断开连接的方法

不过这个方法有个问题,就是   


1、能侦测到客户端主动断开与服务端的连接,但是如果客户端掉线,服务端就接收不到了。。

2、如果处于等待状态,就会出问题。比如说客户端的数据还没有准备好发送,这样你就已经关闭了链接。

最近学习NIO,一直有个疑问,怎么知道客户端断开了连接.

在上网找和试验之后发现下面的方法可以实现这个目的.


我们一般会在服务端有个大的WHILE,然后在里面循环判断是否有客户端连接

          ssc = (ServerSocketChannel) sk.channel();
          sc = ssc.accept();
          System.out.println("客户端连接..."
                + sc.socket().getRemoteSocketAddress());

如果有连接,则注册读入的键

         sc.configureBlocking(false);
         sc.register(selector, SelectionKey.OP_READ);

然后我们就可以在有读入的时候被通知到并及时处理,我们可以在此时加入一个判断,如果读入的RECCOUNT=-1,

则可以判为断开.

        ByteBuffer bf = ByteBuffer.allocate(6);
        SocketChannel sc = (SocketChannel) sKey.channel();
        buffer.clear();

        reccount = sc.read(buffer);
        if(reccount == -1){
            System.out.println("断开..." 
                    + sc.socket().getRemoteSocketAddress());            
            sc.close();
        }


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值