在Java中,如何在不使用DNS的情况下测试网络连接?

问题描述:

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

我们已经尝试通过打开一个Socket来硬编码的IP地址进行测试,但显然不能保证给定的IP地址将来不会改变。任何人都可以提出另一种方式来验证我们有网络连接吗?

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

如果无法连接到列表上的任何IP,则可以假定网络已关闭。

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

+0

我喜欢这个解决方案,因为它增加了我们已经试过的解决方案的稳健性。但是,它确实增加了一点复杂性。 – 2011-01-26 00:36:25

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

+0

我们会给你一个机会。希望它能在我们的设备/ JVM上运行正常。如果是这样,我认为这将是我们正在寻找的解决方案。 – 2011-01-26 00:37:19

+0

出于某种原因(可能是CReME JVM),DNSJava无法在我们的设备上工作。出于这个原因,我们将使用IP地址解决方案列表。如果我能接受这两个答案,我会的。 – 2011-01-26 21:50:31

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

8.8.8.8 
8.8.4.4