我在客户端应用程序中使用 Java Socket 对象。我需要知道服务器的线路何时断开,或者是否有任何事件导致套接字失效。
我看到两种方法:
- 在向套接字写入或从套接字读取时捕获 SocketException,考虑到这些异常会终止套接字
- 捕获这些异常时,检查 Socket.isClosed() 方法以了解它是否终止了套接字
这些方法中的任何一个都可以保证我知道套接字何时死机并且不会再次工作,即使线路上的临时问题已解决? 我们能否排除在套接字操作期间抛出的 (Socket)Exception 以暗示套接字已死?
是否有更好的方法来了解这一点?
最佳答案
至少:
接收异常并不意味着套接字总是死的,来自
Socket.setSoTimeout()
javadoc:If the timeout expires [on a read for instance, a java.net.SocketTimeoutException is raised, though the Socket is still valid.
套接字的关闭标志似乎只有在调用
Socket.close()
方法时才会设置,所以我不会依赖它。
关于java - 如何知道 Java 套接字已死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2055650/