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

最近学习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();
        }

不过学的尚不精,如有理解偏差,希望大家指正.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章