代码之家  ›  专栏  ›  技术社区  ›  Amit

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

  •  2
  • Amit  · 技术社区  · 16 年前

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

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

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

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

    问题3。 这个问题应该是一个非常常见的问题,因为每个访问互联网的应用程序都应该处理这个问题。那么其他开发者通常如何处理这个问题呢?

    问题4。 如果你能给我一个好的演示应用程序解决这个问题,那么它将大大帮助我。

    4 回复  |  直到 16 年前
        1
  •  1
  •   Dmitry    16 年前

    A1号: 我所知道的唯一独立于平台的检查连接的方法是尝试连接到可靠的主机(例如。谷歌)

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

    A3版:

        2
  •  1
  •   bakkal    16 年前

    检查与a的连接 可靠主机数量 ,如果是的话 不可访问的话,你的互联网连接断开的几率比主机断开的几率大。

        3
  •  0
  •   Thorbjørn Ravn Andersen    16 年前

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

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

        4
  •  0
  •   M. Jessup    16 年前

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

    Enumeration<NetworkInterface> ifcs = NetworkInterface.getNetworkInterfaces();
    while(ifcs.hasMoreElements()){
        NetworkInterface ifc = ifcs.nextElement();
        System.out.println(ifc.getDisplayName()+ " "+ifc.isUp());
    }
    

    如果接口断开,那么isUp应该返回false。请注意,这将为您提供所有接口,因此您还应该检查isLoopback(),这样您就可以忽略环回接口,该接口应该始终处于开启状态。这种方法应该比轮询主机更可靠,尤其是在连接速度慢的情况下,而且是一种更“礼貌”的方法。至少你可以用它作为初始测试,如果接口确实报告自己正在运行,那么你可以尝试连接到一个主机。