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

时间:2008-08-22 15:58:13

标签: java exception sockets networking

我的服务器上有一个监听端口,我正在使用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时意识到这个问题,以便我可以尝试重新连接并报告问题。

请问任何建议?

全部谢谢

3 个答案:

答案 0 :(得分:0)

设置短暂超时?

isOutputShutdown()无法满足您的需求吗?

你总是可以构建一个SocketWatcher类,它在自己的Thread中旋转,并反复尝试将空字符串写入Socket,直到它引发SocketClosedException。< / p>

答案 1 :(得分:0)

在TCP中检测断开连接的唯一可靠方法是写入它,这最终会导致“连接重置”IOException。但是由于缓冲,它不会在断开连接后的第一次写入时发生,而是在随后的写入时发生。你无能为力。

答案 2 :(得分:-2)

设置不同的线程以从套接字读取。它将阻塞直到套接字关闭,然后抛出异常。抓住该异常以立即检测到关闭。