我的服务器上有一个监听端口,我使用 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 自己旋转的类 Thread 并反复尝试将空字符串写入 Socket 直到引发 SocketClosedException.

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top