代码之家  ›  专栏  ›  技术社区  ›  Karam Najjar

尽管internet连接可用,此代码段是否会返回false

  •  0
  • Karam Najjar  · 技术社区  · 10 年前

    尽管internet连接可用,此代码段是否会返回false?

       private bool ConnectionIsOk()
        {
            try
            {
                using (var client = new WebClient())
                using (var stream = client.OpenRead("http://www.google.com"))
                {
                    return true;
                }
            }
            catch
            {
                return false;
            }
        }
    

    我在我的程序中使用的这部分代码,当我的朋友启动我的程序时,他说这个函数返回错误,尽管有网络连接!! 这是真的吗?什么时候?

    3 回复  |  直到 10 年前
        1
  •  3
  •   Community CDub    8 年前

    这可能失败的方式有很多。事实上,我也是如此。

    我正在通过代理连接到internet,因此通过Visual Studio进行调试需要输入代理身份验证详细信息。因此,从代理运行此代码可能会返回false。

    另一种选择可能是谷歌不可用,并且在打开时不返回任何响应。

    您的DNS也可能无法解析到您提供的google的链接,这也会使方法返回false。您可以输入IP地址来绕过这种可能性。

    在优化代码的情况下,我将首先保留异常详细信息并返回这些信息。它们可能对您的方法的用户有用;这些额外的信息实际上可以帮助他们弄清楚为什么他们的互联网连接不能正常工作。

    您也可以尝试本主题中提供的ping方法: What is the best way to check for Internet connectivity using .NET?

        2
  •  2
  •   Rudy van Sloten    10 年前

    当然可以。如果你因为任何原因无法联系到谷歌,它将返回false。如果您的DNS关闭(但不是您的互联网连接),它将返回false。引用单个主机名并不理想。

        3
  •  1
  •   Robert Allan Hennigan Leahy    10 年前

    如果互联网连接可用,但:

    1. “www.google.com”无法解析(通过DNS)
    2. 与该服务器的连接未成功(无论出于何种原因)

    函数将返回 false .

    所以你的问题的答案是“ ".