测试互联网是否在 Java?
Test is internet is on in Java?
我正在尝试编写一个简单的程序来测试我的互联网是否正常工作。但是,我目前得到的结果不准确。无论互联网状态如何,我得到的结果都是 互联网不可用。 求助?
注。此 post 将随着新发现的出现而更新,以帮助那些将来发现此 post 的人。
非常感谢 Andreas and Stehen C. 帮助解决了这个问题。
当前状态:已解决。参见编辑 3。
更新: Per 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%,但是还是 The internet is not available. 这意味着:
- 我可以达到 8.8.8.8 就好了,
- 无论 Java 应用程序是否在 Eclipse 或命令行中 运行,它仍然适用于 ████.
编辑 3: 在 Windows 10,您必须登录超级机密管理员帐户才能在 [=15] 使用 -c
选项=].要访问此帐户,您必须在命令行中 运行 命令 net user administrator /active:yes
。 Follow this tutorial here。感谢所有帮助过我的人。
因为你的IP地址不对。我在我的机器上试用了这段代码,它运行良好。再次交叉检查您的 IP 地址。
InetAddress.isReachable
的 javadoc 说:
"Best effort is made by the implementation to try to reach the host, but firewalls and server configuration may block requests resulting in a unreachable status while some specific ports may be accessible.".
而且您显然不能 "ping" 来自 Java 之外的主机这一事实也支持这一点。您的本地网络和/或 ISP 有问题。
更新
实际上,也可能是您的 Java 应用程序没有足够的访问权限来发送 ICMP 数据包。当我在我的机器上尝试您的 ITIWApp 程序时,我发现这是问题所在。它说 "The internet is unavailable" 当我 运行 它是我自己时,它说 "The internet is available" 当我 运行 它以 root 权限。
更新 2
显然您正试图 运行 在 Windows 上执行此操作。根据this answer, Java on Windows does not support ICMP. It is not a permissions issue on that platform. See also Java bug #8133015
(为了它的价值,我可以从这里 "ping" 8.8.8.8。但是当我尝试在端口 7 上使用 "telnet" 到 8.8.8.8 时,它超时。)
在 Windows 10,您必须登录到超级机密管理员帐户才能在 ping
上使用 -c
选项。要访问此帐户,您必须在命令行中 运行 命令 net user administrator /active:yes
。 Follow this tutorial here. 感谢所有帮助过我的人。
我正在尝试编写一个简单的程序来测试我的互联网是否正常工作。但是,我目前得到的结果不准确。无论互联网状态如何,我得到的结果都是 互联网不可用。 求助?
注。此 post 将随着新发现的出现而更新,以帮助那些将来发现此 post 的人。
非常感谢 Andreas and Stehen C. 帮助解决了这个问题。
当前状态:已解决。参见编辑 3。
更新: Per
我的原码:
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%,但是还是 The internet is not available. 这意味着:
- 我可以达到 8.8.8.8 就好了,
- 无论 Java 应用程序是否在 Eclipse 或命令行中 运行,它仍然适用于 ████.
编辑 3: 在 Windows 10,您必须登录超级机密管理员帐户才能在 [=15] 使用 -c
选项=].要访问此帐户,您必须在命令行中 运行 命令 net user administrator /active:yes
。 Follow this tutorial here。感谢所有帮助过我的人。
因为你的IP地址不对。我在我的机器上试用了这段代码,它运行良好。再次交叉检查您的 IP 地址。
InetAddress.isReachable
的 javadoc 说:
"Best effort is made by the implementation to try to reach the host, but firewalls and server configuration may block requests resulting in a unreachable status while some specific ports may be accessible.".
而且您显然不能 "ping" 来自 Java 之外的主机这一事实也支持这一点。您的本地网络和/或 ISP 有问题。
更新
实际上,也可能是您的 Java 应用程序没有足够的访问权限来发送 ICMP 数据包。当我在我的机器上尝试您的 ITIWApp 程序时,我发现这是问题所在。它说 "The internet is unavailable" 当我 运行 它是我自己时,它说 "The internet is available" 当我 运行 它以 root 权限。
更新 2
显然您正试图 运行 在 Windows 上执行此操作。根据this answer, Java on Windows does not support ICMP. It is not a permissions issue on that platform. See also Java bug #8133015
(为了它的价值,我可以从这里 "ping" 8.8.8.8。但是当我尝试在端口 7 上使用 "telnet" 到 8.8.8.8 时,它超时。)
在 Windows 10,您必须登录到超级机密管理员帐户才能在 ping
上使用 -c
选项。要访问此帐户,您必须在命令行中 运行 命令 net user administrator /active:yes
。 Follow this tutorial here. 感谢所有帮助过我的人。