将 Java 套接字配置为在断开连接时快速失败?
-
09-06-2019 - |
题
我的服务器上有一个监听端口,我使用 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。然而,由于缓冲,它不会在断开连接后的第一次写入时发生,而是在后续写入时发生。你对此无能为力。
设置不同的线程来从套接字读取。它会阻塞直到套接字关闭,然后会抛出异常。捕获该异常以立即检测关闭。
不隶属于 StackOverflow