配置Java Socket以在断开连接时快速失败?
我在我的服务器上有一个监听端口,我正在使用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时意识到这个问题,以便我可以尝试重新连接并报告问题。
有什么建议吗?
谢谢大家
设置一个短暂的超时?
isOutputShutdown()
不能得到你想要的吗?
你总是可以构建一个SocketWatcher
类,它在自己的Thread
中旋转并反复尝试将空字符串写入Socket
直到引发SocketClosedException
。
检测TCP中断连接的唯一可靠方法是写入它,这最终会导致“连接重置”IOException。 但是由于缓冲,它不会在断开连接后的第一次写入时发生,而是在后续写入时发生。 你无能为力。
设置不同的线程以从套接字读取。 它将阻塞直到套接字关闭,然后抛出exception。 捕获该exception以立即检测到关闭。
- 捕获javax.swing应用程序中的exception
- 抛出不可能的NullPointerException
- 既不是BindingResult也不是普通的目标对象……例外
- exception处理模式
- 为什么在Linux上使用Java Attach API会失败? (即使maven构建完成)
- 如何监视其他Java应用程序生成的exception或错误?
- java.lang.ClassNotFoundException:org.apache.log4j.Level
- Java Oracle localhost连接错误(ORA-12505)
- 包com.sun.xml.internal.bind.v2.model.annotation不存在