我想写一个简单的程序,测试我的互联网工作。但是,我目前得到不准确的结果。不管网络状态如何,我都会得到结果互联网不可用。帮助?测试是互联网在Java中?
注意。这篇文章将随着新发现的出现而更新,以帮助那些未来发现这篇文章的人。
非常感谢Andreas和Stehen C.他们帮助解决这种情况。
当前状态:已解决。见编辑3.
UPDATE:每Stephen C's comment, Windows可能无法使用这个语法,因为Windows “[不]发送ICMP数据包”。此语法可用于* nix系统和OSX。我无法测试这个。
我的原代码:
import java.io.IOException;
import java.net.InetAddress;
public class ITIWApp
{
public static void main (String [] args) throws IOException
{
InetAddress gdns = InetAddress.getByName("8.8.8.8");
boolean inetIsOn = gdns.isReachable(1000);
if (!inetIsOn)
{
System.out.println("The internet is not available.");
}
else
{
System.out.println("The internet is available.");
}
}
}
编辑:我也尝试过,每@Andreas [link]:
Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
int returnVal = p1.waitFor();
boolean inetIsOn = (returnVal == 0);
if (!inetIsOn)
{
System.out.println("The internet is not avaliable.");
}
else
{
System.out.println("The internet is avaliable.");
}
相同的结果。
编辑2:我做了这个批处理文件,只是为了确保。
@ECHO OFF
echo ITIW?
ping 8.8.8.8
java ITIWApp
pause
结果呢?当然,我可以ping通8.8.8.8就好,0%的数据包丢失,但仍然有互联网不可用。这意味着:
- 我能到达8.8.8.8蛮好的,
- 的Java应用程序是否正在运行Eclipse或命令行,它仍然可以工作,████。
编辑3:在Windows 10,你必须以超级管理员秘密签署帐户也可以使用-c
选项上ping
。要访问此帐户,您必须在命令行中运行命令net user administrator /active:yes
。 Follow this tutorial here。感谢所有在这种疯狂中帮助我的人。
防火墙是否阻止['isReachable'](https://docs.oracle.com/javase/8/docs/api/)用来确定可用性的方法? – Jeffrey
可能的重复:http://stackoverflow.com/questions/9922543/why-does-inetaddress-isreachable-return-false-when-i-can-ping-the-ip-address – Andreas
@Andreas该答案无效枯萎。 – DigiDuncan