gpt4 book ai didi

c# - 测试蜂窝网络上的互联网连接

转载 作者:太空狗 更新时间:2023-10-29 23:45:34 26 4
gpt4 key购买 nike

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

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 正在“唤醒”互联网,以便它可以传输。

我的类(class)做的不是本质上相同的事情吗?如果没有,我怎样才能像 IE 一样“唤醒”互联网连接?

最佳答案

您没有说明您是否受限于某个移动操作系统,但这适用于普通盒子。我尝试利用 System.Net.NetworkInformation 的两个功能命名空间。

我从注册 NetworkChangedEvent 开始.调用GetIsNetworkAvailable如果至少存在一个不是环回接口(interface)的其他 NIC,您就会知道。

如果没有连接,我会尝试通过 ping 主机来唤醒网络层。我用 Dns.GetHostEntry获取主机已知的所有 IP 地址。接下来我尝试 Ping地址一个一个。

请注意,并非所有主机都允许在所有情况下都会导致超时的 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;
}
}

关于c# - 测试蜂窝网络上的互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24663367/

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