gpt4 book ai didi

java - 使用 TCP KeepAlive 检测套接字断开连接

转载 作者:可可西里 更新时间:2023-11-01 02:30:38 25 4
gpt4 key购买 nike

我正在开发一个通过 TCP/IP 托管第 3 方设备的服务器,并且一直在经历突然的连接断开(设备通过蜂窝连接)。我需要找到一种方法来检测断开连接,而无需将数据写入设备本身。

我研究过使用 TCP 保活功能,但 Java 似乎不允许对保活操作的时间进行任何调整。

有什么推荐的方法吗?

我的简化套接字代码如下:

public class Test2Socket {
public static void main(String[] args) {
try {
ServerSocket skt = new ServerSocket(1111);

Socket clientSocket = skt.accept();

clientSocket.setKeepAlive(true);

System.out.println("Connected..");

BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

String inputLine;

while((inputLine = input.readLine()) != null)
{
System.out.println(inputLine);
}

} catch (IOException e) {
e.printStackTrace();
}
}
}

如有任何反馈,我们将不胜感激。

最佳答案

您不会对 TCP 堆栈的内置保持 Activity 走得太远。这是因为您的应用程序无法调整保持 Activity 间隔,它是由操作系统设置的,默认值相当高(小时)。这不是特定于 Java 的。

如果你需要在合理的时间内超时,你必须在要使用的协议(protocol)中实现某种保活。我见过的大多数高级协议(protocol)都具有某种 NOP 功能,您可以在其中发送“Are you there?”消息,另一方发送“是的,我在这里”的回复,而无需执行任何其他操作。

关于java - 使用 TCP KeepAlive 检测套接字断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19786394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com