打开了连接服务器的一个Socket后,隔了一段时间没用,Socket就会自动关闭(为什么?),这时候如果获取该Socket的OutputStream,并往里面写东西,在flush的时候就会出现:
java.net.SocketException: Software caused connection abort: socket write error
的异常。因此,如果隔了一段时间没有使用某个Socket,需要重新使用它的时候,就要先判断它究竟是否还在连接当中,一共尝试了Socket的三个方法:
1、isClosed()
2、isOutputShutdown()
3、isConnected()
发现前两个都没用,即使已经断开了,返回的还是false,只有第三个可以解决问题。
具体原因未知。
2007-4-19更新:
第三个也解决不了问题,还会出现同样的异常,目前的解决方法是catch SocketException,不管socket的状态如何,都把它关闭了重新再连,但是SocketException的种类有很多,不一定是因为Socket已关闭,所以这种方法有点粗鲁,但找不到更好的方法。