JAVA NIO寫服務端判斷客戶端斷開連線的方法

2021-08-26 01:24:45 字數 679 閱讀 6788

最近學習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)

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

JAVA NIO寫服務端判斷客戶端斷開連線的方法

不過這個方法有個問題,就是 1 能偵測到客戶端主動斷開與服務端的連線,但是如果客戶端掉線,服務端就接收不到了。2 如果處於等待狀態,就會出問題。比如說客戶端的資料還沒有準備好傳送,這樣你就已經關閉了鏈結。最近學習nio,一直有個疑問,怎麼知道客戶端斷開了連線.在上網找和試驗之後發現下面的方法可以實現...

java nio 實現選擇器客戶端,服務端

思路 建立通訊的通道 建立緩衝區 將要傳送的資料寫入緩衝區 網路通道將緩衝區中的資料發出 test public void clinet throws ioexception 9.關閉資源 schannel.close 思路 服務端 繫結監聽埠 開啟選擇器 註冊選擇器 獲取監聽事件 獲取建聽建 判斷...

qt TCP客戶端判斷服務端關閉連線

一 客戶端判斷服務端是不是已經關閉的簡單方法就是傳送傳送資料,看返回是不是有錯誤 二 客戶端建立連線 void mainwindow btn connect server void mainwindow connected success 二 判斷部分 void mainwindow btn ser...