尽管有互联网连接可用,但此代码段仍可返回false

时间:2014-08-11 08:40:08

标签: c# system.net

尽管有互联网连接可用,但此代码段是否会返回false?

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

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

3 个答案:

答案 0 :(得分:3)

有很多方法可能会失败。它实际上也为我做了。

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

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

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

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

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

答案 1 :(得分:2)

当然可以。如果您因任何原因无法访问Google,则会返回false。如果您的DNS已关闭(但不是您的互联网连接),则会返回false。引用单个主机名并不理想。

答案 2 :(得分:1)

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

  1. " www.google.com"无法解决(通过DNS)
  2. 与该服务器的连接未成功(无论出于何种原因)
  3. 该函数将返回false

    所以问题的答案是" "。