如何编写一个java程序,告诉我是否有互联网访问权限。我不想ping或创建与某个外部URL的连接,因为如果该服务器将关闭,那么我的程序将无法正常工作。我想要可靠的方法来检测哪些会告诉我100%保证我是否有互联网连接而不管我的操作系统。我想要直接连接到互联网的计算机程序。
我尝试过以下程序
URL url = new URL("http://www.xyz.com/");
URLConnection conn = url.openConnection();
conn.connect();
我想要比这个程序更合适的东西
由于 Sunil Kumar Sahoo
答案 0 :(得分:4)
这取决于你所说的“互联网”连接。许多计算机没有直接连接到互联网,因此即使您可以检查他们是否有网络连接,也并不总是意味着他们可以访问互联网。 / p>
测试计算机是否可以访问其他服务器的唯一100%可靠方法是实际尝试。
答案 1 :(得分:1)
有效的连接到互联网(即你可以实际做的事情)取决于很多东西是正确的,在你的机器,你的本地网,你的路由器,你的调制解调器,你的ISP等等上。有很多地方失败或错误配置会部分或完全阻止网络访问。
不可能毫无疑问地测试所有这些潜在的失败点......甚至可以枚举它们。 (例如,您通常无法了解ISP的网络基础架构中发生的情况。)
正如@codeka所说:“测试计算机是否可以访问其他服务器的唯一100%可靠方法是实际尝试”。
答案 2 :(得分:1)
我认为如果要打开一个包含所有内容的HTTP会话:
并且至少一个他们回来时有一个有效的回复,你会有互联网连接。一旦得到有效的答复,就不要继续测试,因为那样做会很浪费。
如果您担心所有四家公司可能同时倒闭,请随意扩大该名单上的一些超级公司: - )
当然,如果有人控制了你的DNS服务器,那么即使这种方法也可能被欺骗,但它可能和你要获得的一样可靠。
答案 3 :(得分:1)
只需在您提到的代码周围放置一个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;
}
为了获得更好的结果,请调查可以抛出哪种异常并单独处理每种异常。
答案 4 :(得分:0)
Enumaration<NetworkInterface> networkInterface = null;
networkInterface = NetworkInterface.getNetworkInterfaces();
for(NetworkInterface interface : Collections.list(networkInterface)){
System.out.println("Internet Available status is :"+ interface.isUp());
}
答案 5 :(得分:0)
您可以通过InetAddress
课程询问互联网协议来检查连接。如果您收到异常,或者例如使用getLocalHost()
- 这将返回本地主机的地址 - 为您提供以下输出:
localhost/127.0.0.1
代替完全限定名称,例如jaf-stephen-lenovoG40-80/152.6.44.13
,但您未连接到互联网。
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");
}
}
如果您已连接到互联网,您将获得以下输出:
www.facebook.com/31.13.78.35