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