4

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

Socket mySocket = new Socket(host,port);

然后我在 autoflush 模式下抓取一个OutputStream, 用 a 装饰PrintWriter,我在笑——除非监听端口关闭。然后我得到

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

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

我想在下次尝试写入 Socket 时注意问题,以便我可以尝试重新连接并报告问题。

请问有什么建议吗?

谢谢大家

4

3 回答 3

1

设置一个短暂的超时?

没有isOutputShutdown()得到你想要的?

您总是可以构建一个SocketWatcher自己旋转的类,Thread并反复尝试将空字符串写入 ,Socket直到引发SocketClosedException.

于 2008-08-22T16:33:13.820 回答
0

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

于 2014-02-22T22:47:06.493 回答
-2

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

于 2008-09-29T01:12:52.340 回答