Java 检测丢失的连接

2022-09-01 14:07:18

例如,当我使用PuTTY并且我的连接丢失时(或者当我在Windows上执行手册时),它会直接响应并通知我的连接已丢失。ipconfig /release

我想创建一个Java程序来监视我的互联网连接(到一些可靠的服务器),以记录我的互联网出现故障的日期/时间。

我尝试使用该方法,但这将永远返回“true”。如何在Java中执行此操作?Socket.isConnected()


答案 1

好吧,判断连接是否中断的最佳方法是尝试从套接字读取/写入。如果操作失败,则表示您已在某个时间丢失了连接。

因此,您需要做的就是尝试以某个时间间隔读取,如果读取失败,请尝试重新连接。

对您来说,重要的事件将是读取失败时 - 您失去了连接,并且当连接了新的套接字时 - 您重新获得了连接。

这样,您就可以跟踪正常运行时间和停机时间。


答案 2

即使 TCP/IP 是“面向连接”协议,通常也不会通过空闲连接发送任何数据。您可以让套接字打开一年,而 IP 堆栈不会通过它发送任何位。为了注意到连接丢失,您必须在应用程序级别发送一些数据。(*)您可以通过从ADSL调制解调器上拔下电话线来尝试此操作。电脑中的所有连接都应保持连接,除非应用程序具有某种应用程序级别的保持活动机制。

因此,注意到连接丢失的唯一方法是打开与某些服务器的TCP连接并从中读取一些数据。也许最简单的方法可能是连接到某个FTP服务器,并偶尔获取一个小文件或目录列表。我从未见过真正用于这种情况的通用服务器,FTP服务器的所有者可能不喜欢客户端这样做。

(*)还有一种称为TCP keepalive的机制,但是在许多操作系统中,您必须为所有应用程序激活它,如果您想快速注意到连接丢失,那么使用它并不实际。


推荐