Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中检查internet连接_Java - Fatal编程技术网

如何在Java中检查internet连接

如何在Java中检查internet连接,java,Java,我正在从事一个Java项目,该项目需要随时连接互联网 我希望我的程序每隔一段时间(比如5秒或10秒)不断检查互联网连接,并在没有检测到互联网连接时立即显示一条消息 我曾尝试使用isReachable方法来实现此功能,下面是代码- try { InetAddress add = InetAddress.getByName("www.google.com"); if(add.isReachable(3000)) System.out.println("Yes"); else

我正在从事一个Java项目,该项目需要随时连接互联网

我希望我的程序每隔一段时间(比如5秒或10秒)不断检查互联网连接,并在没有检测到互联网连接时立即显示一条消息

我曾尝试使用isReachable方法来实现此功能,下面是代码-

try
{
    InetAddress add = InetAddress.getByName("www.google.com");
    if(add.isReachable(3000)) System.out.println("Yes");
    else System.out.println("No");
}
catch (UnknownHostException e) 
{
    System.out.println("unkownhostexception");
} 
catch (IOException e) 
{
    System.out.println("IoException");
}
但此代码始终返回“否”。这个代码有什么问题


谢谢

我知道的唯一方法是向某个已知主机发送数据包,在某种意义上,您知道它将始终处于运行状态,并且可以从呼叫站点访问

但是,例如,如果选择命名主机,ping可能会由于DNS查找失败而失败


我认为您不应该担心这个问题:如果您的程序需要Internet连接,那是因为它发送或接收数据。连接不像河流那样是一个连续的概念,而是更像一条道路。因此,只需使用Java标准来处理连接错误:IOException。当您的程序必须发送数据时,底层API必然会在网络关闭的情况下抛出IOE。如果您的程序需要数据,请使用超时或类似的方法来检测网络堆栈中可能出现的错误并向用户报告。

如果您只需要频繁使用互联网,我同意Raffaele的建议。只要试着去做,并准备好在失败时处理异常

如果你出于某种原因需要监控互联网的可用性,即使你还不打算使用它,也不知道你将连接到谁,只需尝试连接到一个已知的好网站(google.com、amazon.com、baidu.com…)

这将用于测试几个站点:

public static void main(String[] args) {
    System.out.println(
        "Online: " +
        (testInet("myownsite.example.com") || testInet("google.com") || testInet("amazon.com"))
    );
}


public static boolean testInet(String site) {
    Socket sock = new Socket();
    InetSocketAddress addr = new InetSocketAddress(site,80);
    try {
        sock.connect(addr,3000);
        return true;
    } catch (IOException e) {
        return false;
    } finally {
        try {sock.close();}
        catch (IOException e) {}
    }
}

谢谢,但是这里提供的解决方案在我的情况下不起作用。作者也说,这只是一个黑客可能在某些情况下不起作用。是的,我正在做类似的事情。谢谢!这很有效,非常感谢。testInet()方法就是关键所在。