配置Java套接字以在断开连接时快速失败?

时间:2020-03-05 18:42:06  来源:igfitidea点击:

我的服务器上有一个侦听端口,我正在使用Java类和Socket接口连接到该侦听端口,即

Socket mySocket = new Socket(host,port);

然后,我抓起一个OutputStream,在自动刷新模式下用一个PrintWriter装饰,除了监听端口关闭之外,我在笑。然后我得到

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

而且我似乎无法在套接字上使用isConnected()方法尝试的程序中检测到该问题,但似乎不知道连接已关闭。

下次尝试写入套接字时,我想知道该问题,以便我可以尝试重新连接并报告该问题。

有什么建议吗?

谢谢大家

解决方案

回答

设置较短的超时时间?

isOutputShutdown()是否不能得到我们想要的东西?

我们总是可以构建一个" SocketWatcher"类,该类以其自己的"线程"旋转,并反复尝试将空字符串写入" Socket",直到引发" SocketClosedException"。

回答

设置其他线程以从套接字读取。它将阻塞直到套接字关闭,然后将引发异常。捕获该异常以立即检测到关闭。