如何使用java程序检测internet连接

如何使用java程序检测internet连接,java,network-programming,Java,Network Programming,如何编写一个java程序来告诉我是否可以访问互联网。我不想ping或创建与某个外部url的连接,因为如果该服务器将关闭,那么我的程序将无法工作。我想要可靠的方法来检测,这将告诉我100%保证,无论我的操作系统是否连接到互联网。我想要直接连接到internet的计算机的程序 我已经尝试了以下程序 URL url = new URL("http://www.xyz.com/"); URLConnection conn = url.openConnection()

如何编写一个java程序来告诉我是否可以访问互联网。我不想ping或创建与某个外部url的连接,因为如果该服务器将关闭,那么我的程序将无法工作。我想要可靠的方法来检测,这将告诉我100%保证,无论我的操作系统是否连接到互联网。我想要直接连接到internet的计算机的程序

我已经尝试了以下程序

URL url = new URL("http://www.xyz.com/");           
        URLConnection conn = url.openConnection();
        conn.connect();
我想要比这个节目更合适的节目

谢谢
Sunil Kumar Sahoo

这取决于你所说的“互联网”连接是什么意思。许多计算机没有直接连接到internet,因此即使您可以检查它们是否有网络连接,也并不总是意味着它们可以访问internet

测试计算机是否可以访问其他服务器的唯一100%可靠的方法是实际尝试。

与internet的有效连接(即,您可以实际进行工作的地方)取决于许多事情是否正确,取决于您的机器、本地网络、路由器、调制解调器、ISP等等。在很多地方,故障或错误配置会部分或完全阻止网络访问

不可能确定地测试所有这些潜在故障点。。。甚至列举它们。(例如,您通常无法知道ISP的网络基础设施中发生了什么。)


正如@codeka所说:“测试计算机是否可以访问其他服务器的唯一100%可靠的方法是实际尝试”。

我认为如果您要与以下所有服务器打开HTTP会话:

  • www.google.com
  • www.microsoft.com
  • www.ibm.com
  • www.ford.com
至少有一个回复是有效的,你可以上网。一旦得到有效的响应,不要继续测试,因为那将是一种浪费

如果您担心这四家大公司可能同时倒闭,请随意在该列表中添加更多的大公司:-)


当然,如果有人控制了您的DNS服务器,即使是这种方法也可能会被欺骗,但它可能与您将获得的一样可靠。

只需在您提到的代码周围放置一个try/catch块即可。如果抛出/捕获异常,则您没有连接

boolean connectivity;
try {
    URL url = new URL("http://www.xyz.com/");
    URLConnection conn = url.openConnection();
    conn.connect();
    connectivity = true;
} catch (Exception e) {
    connectivity = false;
}
为了获得更好的结果,请调查可以抛出的异常类型,并分别处理每种异常。

Enumaration networkInterface=null;
Enumaration<NetworkInterface> networkInterface = null; 

networkInterface = NetworkInterface.getNetworkInterfaces();

for(NetworkInterface interface : Collections.list(networkInterface)){

    System.out.println("Internet Available status is :"+ interface.isUp());

}
networkInterface=networkInterface.getNetworkInterfaces(); for(网络接口:集合.列表(网络接口)){ System.out.println(“Internet可用状态为:“+interface.isUp()”); }
您可以通过询问
InetAddress
类中的Internet协议来检查连接。如果出现异常,或者例如使用
getLocalHost()
——返回本地主机的地址——则会给出以下输出:
localhost/127.0.0.1
而不是完全限定的名称,例如
jaf-stephen-lenovoG40-80/152.6.44.13
,则您没有连接到Internet

public static void main(String[] args) {
   try {
      InetAddress address = InetAddress.getByName("www.facebook.com");
      System.out.println(address);
   } catch (UnknownHostException e) {
      System.err.println("Couldn't find www.facebook.com");
   }
}
如果连接到Internet,您将获得以下输出:


www.facebook.com/31.13.78.35

你好,感谢你的支持,对于那些直接上网的电脑,我也希望得到同样的支持access@Sunil-没有计算机直接连接到internet。至少中间有某种调制解调器,可能有路由器和防火墙功能。这可能只是连接到你的ISP,而不是真正的互联网。有趣的哲学问题,@Stephen。什么是互联网。它只是顶级通信提供商吗?它们之间的导线(或其他通信)?或者,它是一切,到你的调制解调器/路由器,甚至你的电脑?如果我从我的个人电脑向世界提供内容,当然它和我的调制解调器也是网络的一部分。@paxdiablo-从天真的用户的角度来看,让他与(比如)谷歌对话涉及到的任何事情,包括谷歌服务器、他的网络浏览器,甚至可能还有他的电脑的电源开关!!