打開了連接服務器的一個Socket后,隔了一段時間沒用,Socket就會自動關閉(為什么?),這時候如果獲取該Socket的OutputStream,并往里面寫東西,在flush的時候就會出現:
java.net.SocketException: Software caused connection abort: socket write error
的異常。因此,如果隔了一段時間沒有使用某個Socket,需要重新使用它的時候,就要先判斷它究竟是否還在連接當中,一共嘗試了Socket的三個方法:
1、isClosed()
2、isOutputShutdown()
3、isConnected()
發(fā)現前兩個都沒用,即使已經斷開了,返回的還是false,只有第三個可以解決問題。
具體原因未知。
2007-4-19更新:
第三個也解決不了問題,還會出現同樣的異常,目前的解決方法是catch SocketException,不管socket的狀態(tài)如何,都把它關閉了重新再連,但是SocketException的種類有很多,不一定是因為Socket已關閉,所以這種方法有點粗魯,但找不到更好的方法。