gpt4 book ai didi

java - 用Java测试互联网是否打开?

转载 作者:行者123 更新时间:2023-12-01 11:14:15 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的程序来测试我的互联网是否正常工作。但是,我目前得到的结果不准确。无论互联网状态如何,我都会得到结果互联网不可用。帮助?

注意。这篇文章将随着新发现的出现而更新,以帮助那些将来发现这篇文章的人。
非常感谢AndreasStehen C.感谢他们帮助解决此案。
当前状态:已解决。请参阅编辑 3。

<小时/>

更新:根据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 上,您必须登录 super secret 管理员帐户才能在 ping 上使用 -c 选项。要访问此帐户,您必须在命令行中运行命令net useradministrator/active:yesFollow this tutorial here 。感谢所有在这场疯狂中帮助过我的人。

最佳答案

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.".

您显然无法从 Java 外部“ping”主机,这一事实也支持了这一点。您的本地网络和/或 ISP 有问题。

更新

实际上,也可能是您的 Java 应用程序没有足够的访问权限来发送 ICMP 数据包。当我在我的机器上尝试您的 ITIWApp 程序时,我发现这是问题所在。当我以自己的身份运行它时,它说“互联网不可用”,当我以root权限运行它时,它说“互联网可用”。

更新2

显然您正在尝试在 Windows 上运行它。根据this answer ,Windows 上的 Java 不支持 ICMP。这不是该平台上的权限问题。另请参见 Java 错误 #8133015

<小时/>

(无论如何,我可以从这里“ping”8.8.8.8。但是当我尝试在端口 7 上使用“telnet”访问 8.8.8.8 时,它超时了。)

关于java - 用Java测试互联网是否打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32019657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com