Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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
C# 在蜂窝网络上测试internet连接_C#_Winforms_.net 4.0_Cellular Network - Fatal编程技术网

C# 在蜂窝网络上测试internet连接

C# 在蜂窝网络上测试internet连接,c#,winforms,.net-4.0,cellular-network,C#,Winforms,.net 4.0,Cellular Network,我有一个为远程卡车编写的应用程序,用于手机服务。在我做任何事情之前,我正在通过本课程检查互联网: using System.Net; namespace SSS.ServicesConfig.MiscClasses { public class VerifyInternetAccess { public static bool HasInternet() { try { using (var client = new WebCli

我有一个为远程卡车编写的应用程序,用于手机服务。在我做任何事情之前,我正在通过本课程检查互联网:

using System.Net;

namespace SSS.ServicesConfig.MiscClasses
{
  public class VerifyInternetAccess
  {
    public static bool HasInternet()
    {
      try
      {
        using (var client = new WebClient())
        using (var stream = client.OpenRead("http://www.google.com"))
        {
          return true;
        }
      }
      catch
      {
        return false;
      }
    }
  }
}
在某些情况下,外部蜂窝设备上的指示灯会亮起,就好像它有互联网一样。我的测试课结果是假的,所以它认为它没有互联网

然后,驱动程序可以打开internet explorer,关闭internet explorer,迅速运行我的应用程序,并通过上述测试

用户们说IE正在“唤醒”互联网,以便它能够传输信息


我的班级不也是这么做的吗?如果没有,我如何像IE那样“唤醒”互联网连接

您没有说明您是否仅限于某个移动操作系统,但这在普通设备上有效。 我尝试利用名称空间的两个特性

我首先要登记参加考试。通过呼叫,您可以了解是否存在至少一个不是环回接口的其他NIC

如果没有连接,我尝试通过ping主机唤醒网络层。 我使用获取主机已知的所有IP地址。接下来我试着一个接一个地找到地址

请注意,并非所有主机都允许ICMP通信,这在所有情况下都会导致超时。但是,如果同时网络可用,则应触发NetworkChanged事件,并将
HasConnection
设置为true

public class VerifyInternetAccess
{
    private static bool HasConnection = false;
    static VerifyInternetAccess()
    {
        NetworkChange.NetworkAvailabilityChanged += (o, ca) =>
            {
                HasConnection = ca.IsAvailable;
            };

        HasConnection = NetworkInterface.GetIsNetworkAvailable();
    }

    public static bool HasInternet()
    {
        bool hasEnded = false;
        if (!HasConnection)
        {
            // let's try to wake up...
            using (var ping = new Ping())
            {
                var iphost = Dns.GetHostEntry("www.google.com");

                foreach (var addr in iphost.AddressList)
                {
                    var reply = ping.Send(addr);
                    if (reply.Status == IPStatus.Success)
                    {
                        HasConnection = true;
                        break;
                    }
                }
            }
        }
        return HasConnection;
    }
}

只是一个理论,但可能与DNS有关。你无法解析www.google.com,而DNSCache服务记住了这个结果,所以即使在它应该工作的时候,它也会一直失败,直到有什么东西给了服务一个提示。您可以禁用DNSCache或仅使用IP地址测试internet连接,例如,您可以ping 8.8.8.8。以下是另一个解决方案: