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();
        }

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



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