java nio 服務端如何知道客戶端斷開連接

 
 
  1. 服務器如何知道客戶端斷開了呢??????
         比如我想客戶端斷開後, 發送一些消息給其他的客戶端, 該怎麼辦呢
 
 
我是基於java nio 來實現的邏輯代碼。
 
在客戶端斷開後, 我們來debug追蹤一下我們的服務器程序代碼的執行步驟:
 
 
1 :  selectedKeys()會有一個請求, 然後會執行讀操作
 
 
 
2:  執行讀操作的時候, 會報錯, 報錯提示 java.io.IOException: 遠程主機強迫關閉了一個現有的連接。
 
 
 
 
private void read(SelectionKey key) throws IOException{
        SocketChannel socketChannel = (SocketChannel) key.channel();
        this.readBuffer.clear();//清除緩衝區,準備接受新數據
        System.out.println("===============read");
        int numRead;
        try{
            numRead = socketChannel.read(this.readBuffer);
        }catch (IOException e){    // 客戶端斷開連接,這裏會報錯提示遠程主機強迫關閉了一個現有的連接。
            offlineUser(key);
            key.cancel();
            socketChannel.close();
            return;
        }
}

 

這時候我們的服務器就知道了客戶端斷開連接了, 然後可以做一些邏輯操作, 及socketChannel關閉操作。
 
比如把這個客戶端斷開的消息發送給其他的客戶端, 我基於此實現了一個需求在羣聊的時候, 一個用戶退出了, 給其他羣用戶提示某用戶離線了。
 
 
 
發佈了69 篇原創文章 · 獲贊 20 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章