關閉客戶端令伺服器端報錯的解決
一、問題描述:
多個客戶端能訪問乙個伺服器,能實現群聊。但是,當關閉乙個客戶端時,伺服器會報錯。報錯為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...