c# 判断是否连接公网
有一个需求,软件需要在连接公网的状态下才能使用,否则弹出提示
我们判断一下网络不通情况
1.系统未开启网络:例如关掉了WIFI,拔掉网线
2.网络已连接无internet:连接了路由器,但路由器未连接外网
对于以上两种情况:
1.首先可以使用一下代码,来判断系统是否开启网络
System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()
2.可以使用ping命令,测试是否能达到目标主机进而判断是否连接了外网
string host = "www.baidu.com";//测试主机,根据自己需求随意填
PingReply reply = null;
Ping ping = new Ping();
try {
reply = ping.Send(host);
}
catch (Exception e) {
if (e.Message != "") {
return false;
}
}
if (reply.Status == IPStatus.Success) {
return true;//网络正常,可以访问host主机
}
else {
return false;//无法访问网络
}
这里的ping命令,在路由器没网的情况会报错,用try包裹,如果报错,直接抛出网络未连接即可
那么对于主机,想仅判断局域网内某192.168.X.X 的Host是否连通也可以,这样就从判断是否连接外网到判断是否连接内网某主机或vlan
完整的验证代码如下:
public static bool CheckWebIsConnected() {
//首先验证,系统级的,wifi或者网络底层配置,是否开启
bool isSystemNetConnect = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
if (!isSystemNetConnect) {
return false;//系统级就没给网,直接返回false
}
//如果系统级开启了网络,例如连接了路由器,但路由器内没网
//使用ping测试主机
string host = "www.baidu.com";
PingReply reply = null;
Ping ping = new Ping();
try {
reply = ping.Send(host);
}
catch (Exception e) {
if (e.Message != "") {
return false;
}
}
if (reply.Status == IPStatus.Success) {
return true;//网络正常,可以访问host主机
}
else {
return false;//无法访问网络
}
}