簡體   English   中英

如何用Java檢查服務器是否仍連接到客戶端?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM