[英]How to check whether server is still connected to client or not in Java?
我想檢查服務器是否仍然連接到客戶端,然后再從流中讀取。 如何在Java中做到這一點? 我當前的代碼如下。此檢查僅適用於客戶端套接字嗎?
public void receiveResultFromServer() {
try {
while(!clientSocket.isClosed()) {
try{
Object obj = inStream.readObject();
if (obj instanceof Command) {
ConnectionManager.parseCommand((Command) obj);
} else if (obj instanceof CommandExecResult) {
ConnectionManager.parseCommandExecutionResult((CommandExecResult) obj);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
} catch(Exception e) {
e.printStackTrace();
}
在讀取流之前就知道連接性不好。 而是設計一個心跳機制。
算法:
a)在客戶端和服務器上使用枚舉“ SEND_BEAT”和“ RECEIVE_BEAT”設計兩個命令。
b)現在,一旦服務器啟動,就啟動一個線程,使用該命令從服務器向客戶端發送信號(HandShake協議) ,客戶端將響應該信號到服務器。
c)使用Java Timer和TimerTask類,可以按固定的時間間隔安排此發送信號作業,例如
scheduleAtFixedRate(new RunTimer(), 5000, 1000);
d)在響應的基礎上,維護服務器上客戶端的狀態。
e)現在您可以使用狀態檢查客戶端和服務器之間的連接。
f)實際上,您甚至可以設計一個重新連接機制,該機制將在最終更新之前嘗試一定次數。
h)另外,您還需要根據需要將狀態維護為檢查點。
希望以上算法能夠滿足您的需求。
如果對等方斷開連接,則您的代碼將拋出EOFException
。 如果發生網絡故障,它可能會永遠阻塞,因此您可能要考慮使用讀取超時,這將拋出SocketTimeoutException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.