一、使用心跳包
因為:
1、正常情況下 客戶端斷開會產生錯誤,在連接里面能catch到
把套接字操作放到try catch里,如果一端斷開了,另一端還繼續進行套接字操作就會抱錯。你捕捉到就說明另一端完蛋了,進行你要的處理就好了啊 。
2、但是如果客戶端是突然斷電等情況下,不會產生這個錯誤 連接會一直等待下去。
你可以用心跳包來解決
1、定義一個與客戶連接相關的Boolean變量 b
2、客戶端那邊用一個線程 每隔一定時間發送一個無意義的數據包
3、服務器接收到了就將變量b設置為true
4、在服務器這邊開啟一個線程心跳包
public void 心跳包()
{
while (b)
{
b = false;
Thread.sleep(10000);
} //檢測到客戶端掉線
}
這樣就可以判斷客戶端掉線,你可以進行處理了
基于tcp協議的聊天室,里面用到了心跳包的概念,可以利用廣播的形式。時時監測在線用戶的狀態,當用戶下載,離線,客戶端附帶提示發送給服務器,服務器收到信息,廣播給所以在線用戶。當然普通的方式是,服務器不停的監測客戶端的,檢查到異常行為,做異常處理。