【问题标题】:In Java, how can I test for network connectivity without using DNS?在 Java 中,如何在不使用 DNS 的情况下测试网络连接?
【发布时间】:2011-01-25 21:29:55
【问题描述】:

我们有一个在便携式设备上运行的 Java 应用程序,而我们使用的 JVM (CReMe) 似乎有一个错误,它会缓存负面的 DNS 查找,即使我们告诉它不要缓存也是如此。因此,当我们尝试与我们的服务器建立连接并且由于尚未建立网络连接而导致 DNS 查找失败时,应用程序将被卡住,因为它永远不会再次执行查找,即使连接恢复也是如此。

我们已经尝试通过打开一个 Socket 到一个硬编码的 IP 地址来进行测试,但显然不能保证给定的 IP 地址将来不会改变。谁能建议另一种方法来验证我们是否有网络连接?

【问题讨论】:

    标签: java networking


    【解决方案1】:

    您可以拥有一个 IP 列表并尝试打开一个连接。它们可能是您 LAN 上机器的 IP,也可能是 Google 或 Facebook 的 IP。

    如果您无法连接到列表中的任何 IP,则可以认为网络已关闭。

    当网络启动时,您可以使用 DNS 查找更新列表。

    【讨论】:

    • 我喜欢这个解决方案,因为它增加了我们已经尝试的解决方案的稳健性。但是,它确实增加了相当多的复杂性。
    【解决方案2】:

    您可以尝试自定义 DNS 客户端,例如 dnsjava

    【讨论】:

    • 我们会试一试。希望它能在我们的设备/JVM 上运行良好。如果是这样,我认为这将是我们正在寻找的解决方案。
    • 出于某种原因(可能是 CReME JVM),DNSJava 无法在我们的设备上运行。出于这个原因,我们将使用 IP 地址列表解决方案。如果我能接受这两个答案,我会的。
    【解决方案3】:

    也许您可以尝试使用 Google 的 DNS 服务器?怀疑他们会不会改变,而且很确定他们通常会上升:)

    8.8.8.8
    8.8.4.4
    

    【讨论】:

    • 我考虑过这一点,但我不确定我们是否可以假设它们不会改变。我喜欢 Jay 的建议,因为它更能适应这些变化。
    • 嗯,Jay的建议和你知道的基本一样。我只是建议了两个特定的 IP 来做到这一点,这很可能不会改变。我的意思是,为什么有人会更改看起来像 8.8.8.8 的 IP...
    猜你喜欢
    • 2011-10-08
    • 2020-10-23
    • 2022-12-04
    • 1970-01-01
    • 2016-11-02
    • 2012-02-03
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多