c#判断网络连接是否正常的方法

今天给消息提示工具加入网络连接判断功能,当网络断开的时候,部分功能不能使用。

[csharp]
public class NetworkUtil
{
[DllImport("wininet.dll", EntryPoint = "InternetGetConnectedState")]
public extern static bool InternetGetConnectedState(out int conState, int reder);
[DllImport("sensapi.dll")]
private extern static bool IsNetworkAlive(out int connectionDescription);

static System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
static System.Net.NetworkInformation.PingReply res;

/// <summary>
/// 检查网络是否连接?
/// </summary>
/// <returns></returns>
public static bool IsConnectedToInternet()
{
//方法一,winapi,外网没用,可以用来检测内网是否连通,但有时不及时
//return CheckInternetGetConnectedState();

//方法二,winapi,外网没用,可以用来检测内网是否连通,可以及时反应网络连通情况,但是需要服务System Event Notification支持(系统默认自动启动该服务)。使用该函数,需要安装最新的SDK(如.net的)
//return CheckIsNetworkAlive();

//方法三,ping方式,找一个可以ping得通的网址来判断,感觉有点傻,如果此网站出现问题,此判断也会出错
return CheckPing("www.baidu.com");

//方法四,连接一个外网的ip和端口,不太稳定,有时会误报
//return CheckIP("61.158.133.74", 80);
}

private static bool CheckInternetGetConnectedState()
{
int Desc = 0;
return InternetGetConnectedState(out Desc, 0);
}

private static bool CheckIsNetworkAlive()
{
int flags;
return IsNetworkAlive(out flags);
}

private static bool CheckPing(string url)
{
try
{
res = ping.Send(url);
if (res.Status == System.Net.NetworkInformation.IPStatus.Success)
{
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
}

private static bool CheckIP(string ip, int port)
{
try
{
System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient(ip, port);
if (client.Connected)
{
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
}
}
[/csharp]
总结:如果只是判断内网是否通畅,建议使用上面两个,如果是判断外网,必须用下面两种,个人感觉用ping的方式可能更快更准确一点。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>