java - 如何知道 Java 套接字已死

标签 java sockets exception-handling

我在客户端应用程序中使用 Java Socket 对象。我需要知道服务器的线路何时断开,或者是否有任何事件导致套接字失效。

我看到两种方法:

  • 在向套接字写入或从套接字读取时捕获 SocketException,考虑到这些异常会终止套接字
  • 捕获这些异常时,检查 Socket.isClosed() 方法以了解它是否终止了套接字

这些方法中的任何一个都可以保证我知道套接字何时死机并且不会再次工作,即使线路上的临时问题已解决? 我们能否排除在套接字操作期间抛出的 (Socket)Exception 以暗示套接字已死?

是否有更好的方法来了解这一点?

最佳答案

至少:

  1. 接收异常并不意味着套接字总是死的,来自 Socket.setSoTimeout() javadoc:

    If the timeout expires [on a read for instance, a java.net.SocketTimeoutException is raised, though the Socket is still valid.

  2. 套接字的关闭标志似乎只有在调用 Socket.close() 方法时才会设置,所以我不会依赖它。

关于java - 如何知道 Java 套接字已死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2055650/

相关文章:

javascript - JSLint 提示我的 try/catch

java - 反射不返回正确的实例

c - select 等待在套接字中写入的奇怪行为

ruby - `var = something rescue nil` 行为

performance - 发送两个后续 HTTP 请求的最快方法是什么?

c# 与 c++ ssl_connect

c# - 如果 finally block 抛出异常会怎样?

java - Hibernate org.apache.xerces.parsers.SAXParser 未实现 XMLReader 异常

Java比较器按多个字段排序,字段计数应该是动态的

java - 从浏览器获取重定向的 URL - Android