簡體   English   中英

配置Java Socket以在斷開連接時快速失敗?

[英]Configure a Java Socket to fail-fast on disconnect?

我在我的服務器上有一個監聽端口,我正在使用Java類和Socket接口連接,即

Socket mySocket = new Socket(host,port);

然后我抓住一個OutputStream ,在autoflush模式下使用PrintWriter進行裝飾,我笑了 - 除非監聽端口關閉。 然后我明白了

tcp4       0      0  *.9999                 *.*                    LISTEN
tcp        0      0  127.0.0.1.45737        127.0.0.1.9999         CLOSE_WAIT

我似乎無法在程序中檢測到問題 - 我嘗試在套接字上使用isConnected()方法,但似乎並不知道連接已關閉。

我想在下次嘗試寫入Socket時意識到這個問題,以便我可以嘗試重新連接並報告問題。

有什么建議嗎?

謝謝大家

檢測TCP中斷連接的唯一可靠方法是寫入它,這最終會導致“連接重置”IOException。 但是由於緩沖,它不會在斷開連接后的第一次寫入時發生,而是在隨后的寫入時發生。 你無能為力。

設置一個短暫的超時?

isOutputShutdown()不能得到你想要的嗎?

你總是可以構建一個SocketWatcher類,它在自己的Thread中旋轉並反復嘗試將空字符串寫入Socket直到引發SocketClosedException

設置不同的線程以從套接字讀取。 它將阻塞直到套接字關閉,然后拋出異常。 捕獲該異常以立即檢測到關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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