關閉客戶端令伺服器端報錯的解決

2021-08-27 16:59:01 字數 1329 閱讀 3667

關閉客戶端令伺服器端報錯的解決

一、問題描述:

多個客戶端能訪問乙個伺服器,能實現群聊。但是,當關閉乙個客戶端時,伺服器會報錯。報錯為connect 

reset,後面則顯示出錯的位置。

二、解決方法:

提示 :

重點關注橘紅色和注釋部分

// 接收訊息的方法

public string receive() catch (ioexception e)

//1、我喜歡用try、catch來捕獲異常,而不喜歡在整個方法或類的開頭用declare來宣告異常。因為用try、catch能做到更精細的發現異常。

2、 如果我沒關閉客戶端,這個receive()方法只會執行到上面的return sb.tostring()這一語句後就跳出了receive()方法,而不會執行後面兩句橘紅色的語句。此時try、catch也不會發生作用,因為沒發生異常。

3、當我關閉了乙個客戶端的時候,try{}裡的**就發生了異常,從而使try發揮了作用,此時,會忽略try{}裡面的內容,直接執行

catch{}裡面的**,很明顯這會輸出「某某使用者下線」這樣的語句。但receive()方法並沒結束,因為上面的return sb.tostring()被忽略掉了。因此會繼續執行完後面的兩個語句後才會結束。

judge=false;//這是關鍵所在,後面馬上就會解釋

return clientname+" is off-line!";

}

//顯示客戶端發來的訊息

try

} catch (exception e)

socket.close();//關閉當前客戶端

//如果不關的話,就會一直存在這個socket,從下面這個語句可判斷socket是否已關閉

system.out.println("客戶端關閉否:"+socket.isclosed());

server.list.remove(this);//從佇列中移除該客戶端

//需記得將該客戶端從佇列中移除,否則當**訊息,總會遍歷到這個已關閉的客戶端,從而引發異常

} catch (exception e)

oracle客戶端訪問伺服器端

1.客戶端工具 可以使用sqlplus,oacle sql developer,pl sql developer 最近專案用到了oracle,使用的是oracle10g,因為小組內有多人使用資料庫,並且oracle資料庫很佔內 存,就放在單獨的一台伺服器上,所以最好每個人都裝乙個oracle10g的...

客戶端與伺服器端通訊

關係圖 傳送 邏輯管理器 處理邏輯傳送指令 指令解析管理器 根據協議xml解析指令成二進位制資料 把二進位制資料傳給伺服器 接收 伺服器傳送二進位制資料到客戶端 指令解析管理器 根據協議xml解析二進位制資料 根據解析資料對映到邏輯類來處理 2 1 3 20 2,2 21 1,1,2 指令名和指令名...

fms伺服器端呼叫客戶端

la server呼叫client端 要把函式定義到nc上!mync new netconnection mync.onstatus function info mync.connect rtmp localhost connect mync.msgfromserver function msg m...