Java—如何通过Java桌面应用程序检测internet连接已断开?

Java—如何通过Java桌面应用程序检测internet连接已断开?,java,multithreading,internet-connection,Java,Multithreading,Internet Connection,我正在开发一个访问internet的Java桌面应用程序。它是一个多线程应用程序,每个线程执行相同的工作(意味着每个线程都是同一线程类的实例) 现在,由于所有线程都需要internet连接处于活动状态,因此应该有某种机制来检测internet连接是否处于活动状态 问题1。如何检测internet连接是否处于活动状态 问题2。在哪里实现此internet状态检查机制代码?我是否应该启动一个单独的线程定期检查internet状态,并在状态从一种状态更改为另一种状态时通知所有线程?或者我应该让每个线程

我正在开发一个访问internet的Java桌面应用程序。它是一个多线程应用程序,每个线程执行相同的工作(意味着每个线程都是同一线程类的实例)

现在,由于所有线程都需要internet连接处于活动状态,因此应该有某种机制来检测internet连接是否处于活动状态

问题1。如何检测internet连接是否处于活动状态

问题2。在哪里实现此internet状态检查机制代码?我是否应该启动一个单独的线程定期检查internet状态,并在状态从一种状态更改为另一种状态时通知所有线程?或者我应该让每个线程自己检查互联网状态吗

第三季度。这个问题应该是一个非常常见的问题,因为每个访问internet的应用程序都应该处理这个问题。那么其他开发人员通常如何处理这个问题呢


第四季度。如果您能给我一个解决这个问题的好的演示应用程序的参考,那么它将对我有很大帮助。

A1:我知道的唯一独立于平台的检查连接的方法是尝试连接到可靠的主机(例如google.com)

A2:这取决于线程获取连接信息的频率。如果有很多线程,它们需要每秒检查一次连接,我更喜欢单独的线程


A3:解决问题有特定于平台的方法。由于您使用Java,我认为您不应该依赖它们。

如果您不能直接询问操作系统,您可以创建到已知主机的套接字连接。如果计算机本身的internet连接断开,套接字连接将被断开,您的程序将收到通知


如果需要检测“途中”的连接丢失,则必须定期接收套接字上的数据,并跟踪这些数据是否“按时”到达。如果没有,则连接没有响应。

检查与可靠主机数的连接,如果这些主机都无法访问,则您的internet连接断开的可能性比主机断开的可能性更大。

正如其他人提到的,您可以轮询可靠主机,另一个选项是使用java.net.NetworkInterface类及其方法isUp()。快速演示:

Enumeration<NetworkInterface> ifcs = NetworkInterface.getNetworkInterfaces();
while(ifcs.hasMoreElements()){
    NetworkInterface ifc = ifcs.nextElement();
    System.out.println(ifc.getDisplayName()+ " "+ifc.isUp());
}
枚举ifcs=NetworkInterface.getNetworkInterfaces(); while(ifcs.hasMoreElements()){ NetworkInterface ifc=ifcs.nextElement(); System.out.println(ifc.getDisplayName()+“”+ifc.isUp()); }
如果接口断开,则isUp应返回false。请注意,这将为您提供所有接口,因此您还应该检查isLoopback(),以便可以忽略loopback接口,该接口应始终处于打开状态。这种方法应该比轮询主机更可靠,尤其是在连接速度较慢的情况下,而且是一种更“礼貌”的方法。至少,您可以将此作为初始测试,如果接口报告自己正在运行,那么您可以尝试连接到主机。

是的,我只需要一种独立的方式来检查internet状态即使在“询问操作系统”方法中,我们也有一个问题:我们应该如何区分到internet和到intranet的连接?请注意“接口已启动”不等于“连接到Internet处于活动状态”。因此,它只能用作预检查。