Posted on 2013-08-15 20:09
云自無心水自閑 閱讀(2692)
評論(0) 編輯 收藏
最近在開發中遇到一個問題,就是如何判斷遠端服務器是否已經斷開連接,如果斷開那么需要重新連接。 首先想到socket類的方法isClosed()、isConnected()、isInputStreamShutdown()、isOutputStreamShutdown()等,但經過試驗并查看相關文檔,這些方法都是本地端的狀態,無法判斷遠端是否已經斷開連接。 然后想到是否可以通過OutputStream發送一段測試數據,如果發送失敗就表示遠端已經斷開連接,類似ping,但是這樣會影響到正常的輸出數據,遠端無法把正常數據和測試數據分開。 最后又回到socket類,發現有一個方法sendUrgentData,查看文檔后得知它會往輸出流發送一個字節的數據,只要對方Socket的SO_OOBINLINE屬性沒有打開,就會自動舍棄這個字節,而SO_OOBINLINE屬性默認情況下就是關閉的,太好了,正是我需要的! 于是,下面一段代碼就可以判斷遠端是否斷開了連接: Java代碼

- try{
- socket.sendUrgentData(0xFF);
- }catch(Exception ex){
- reconnect();
- }