2015-05-14 94 views
1

斷開從(的Java網絡編程第四版): 判斷一個套接字已打開,你需要 檢查isConnected()返回true,isClosed()返回false。舉一個例子:關於檢查客戶端是否從服務器套接字

boolean connected = socket.isConnected() && ! socket.isClosed(); 

我需要找到一種方法,儘快客戶端從服務器斷開連接的Socket發現。使用上述伎倆,我曾嘗試以下:

Socket socket = ...; 
    while (socket.isConnected() && !socket.isClosed()) { 
     // do something ... 
     // here, the client is always connected 
    } 
    // client is disconnected 

上述方法對我的作品,但它始終是正確的?它檢測到所有的情況?

+0

如果你在while循環中時發生了什麼事,你會從服務器斷開連接? – Lrrr

+0

不是'while(!socket.isClosed()&& socket.isConnected()){'better –

+0

檢查這個http://stackoverflow.com/questions/969866/java-detect-lost-connection –

回答

0

根據應用情況,智能捕捉異常看起來是一個很好的解決方案。然而,這個要求是你實際上想要向客戶發送/做些事情。可能這兩種方法的組合適合您的特定應用。你可以試試看: Java detect lost connection

0

這本書是錯誤的,如果這就是它說的。 isConnected()與插座當前是否打開無關。它會告訴你它是否曾經連接過,哪一個都不是一回事。

isOpen()確實告訴你套接字是否打開,但並沒有告訴你有關連接狀態的任何信息。的連接是否仍然是開放的試驗是否:

  • read()返回-1
  • readLine()已經返回null
  • readXXX()已拋出EOFException任何其他X

.. 。所有這些都表明對方已關閉連接,或者

  • 任何讀取或寫入方法都會拋出帶有文本'連接重置'的IOException
相關問題