您的位置:首页 > 编程语言 > C#

c#如何检查局域网内服务器是否连通

2013-04-23 22:45 369 查看
using System;

using System.Collections.Generic;

using System.Text;

using System.Net.NetworkInformation;

namespace ConsoleApplication1

{

class Program

{

public static void Main(string[] args)

{

string url = "www.baidu.com;www.sina.com;www.cnblogs.com;www.google.com;www.163.com;www.csdn.com";

string[] urls = url.Split(new char[] { ';' });

CheckServeStatus(urls);

Console.ReadKey();

}

/// <summary>

/// 检测网络连接状态

/// </summary>

/// <param name="urls"></param>

public static void CheckServeStatus(string[] urls)

{

int errCount = 0;//ping时连接失败个数

if (!LocalConnectionStatus())

{

Console.WriteLine("网络异常~无连接");

}

else if (!MyPing(urls, out errCount))

{

if ((double)errCount / urls.Length >= 0.3)

{

Console.WriteLine("网络异常~连接多次无响应");

}

else

{

Console.WriteLine("网络不稳定");

}

}

else

{

Console.WriteLine("网络正常");

}

}

#region 网络检测

private const int INTERNET_CONNECTION_MODEM = 1;

private const int INTERNET_CONNECTION_LAN = 2;

[System.Runtime.InteropServices.DllImport("winInet.dll")]

private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved);

/// <summary>

/// 判断本地的连接状态

/// </summary>

/// <returns></returns>

private static bool LocalConnectionStatus()

{

System.Int32 dwFlag = new Int32();

if (!InternetGetConnectedState(ref dwFlag, 0))

{

Console.WriteLine("LocalConnectionStatus--未连网!");

return false;

}

else

{

if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0)

{

Console.WriteLine("LocalConnectionStatus--采用调制解调器上网。");

return true;

}

else if ((dwFlag & INTERNET_CONNECTION_LAN) != 0)

{

Console.WriteLine("LocalConnectionStatus--采用网卡上网。");

return true;

}

}

return false;

}

/// <summary>

/// Ping命令检测网络是否畅通

/// </summary>

/// <param name="urls">URL数据</param>

/// <param name="errorCount">ping时连接失败个数</param>

/// <returns></returns>

public static bool MyPing(string[] urls, out int errorCount)

{

bool isconn = true;

Ping ping = new Ping();

errorCount = 0;

try

{

PingReply pr;

for (int i = 0; i < urls.Length; i++)

{

pr = ping.Send(urls[i]);

if (pr.Status != IPStatus.Success)

{

isconn = false;

errorCount++;

}

Console.WriteLine("Ping " + urls[i] + " " + pr.Status.ToString());

}

}

catch

{

isconn = false;

errorCount = urls.Length;

}

//if (errorCount > 0 && errorCount < 3)

// isconn = true;

return isconn;

}

#endregion

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: