java - 如何从客户端检测网络断开(JAVA)

标签 java sockets

我写了java客户端服务器socket连接代码。服务器接受客户端连接,然后服务器使用 PrintStream 发送数据,客户端在 readline() 中读取数据。之后,客户端将在readline中等待服务器。如果出现网络断开,客户端会一直在readline中等待,并且永远不会退出readline。有没有办法检测客户端本身的断开连接?或者我是否必须编写新的心跳线程来检查网络断开情况?

最佳答案

在套接字上打开套接字选项 SO_KEEPALIVE。这将启用 TCP 协议(protocol)中内置的心跳功能。

这是打开此功能的简单方法。

Socket socket = ...; // Your socket on the client side
socket.setKeepAlive(true);

如果连接的另一端停止响应心跳,您将在调用从套接字读取数据时收到 IOException

但是,超时时间为 2 小时。这对于您的需求来说可能太长(您没有指定)

关于java - 如何从客户端检测网络断开(JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29426730/

相关文章:

java - Maven3 无法从远程仓库获取最新的 Artifact SNAPSHOT 版本

java - 从字符串中分割最后两组 id

java - J2SE 中的 WebSockets(服务器/客户端)实现 --- 为什么不呢?

python - 如何将消息从纯数据发送到 Python?

可以通过 telnet 访问我的服务器,但不能通过我的客户端访问

c - 将可变数量的参数传递给 C 函数

java - 如果在java中没有按下按钮,则在5秒后关闭showOptionDialog

java - JAXB - 从 Java 对象字段创建嵌套子元素

java - 如何制作一个出现在我创建的任何 JFrame 顶部的 Swing 菜单栏?

node.js - sailsjs 摆脱 session 和套接字池