有些時候我們做開發需要判斷網絡是否連通
在網上找了很多種方式
自己總結了一下,把最簡單最有效方式記錄一下
以便以後用到的時候不用那麼麻煩的又去一個一個的試
檢查是否連通Internet網絡
要導入庫wininet.dll
[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(int Description, int ReservedValue);
檢查是否連通局域網服務器
這裏通過執行ping命令,發送數據包判斷是否連通
進過我的測試,ping命令還是一個可行的方法
網上有一些離譜的,用socket,雖然還是可以判斷,但是侷限在於要寫一個服務端程序
誰沒事去寫一個測試網絡是否連通的服務端程序呢
下面是我寫的代碼,複製粘貼就可以用了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.NetworkInformation;
using System.Runtime.InteropServices;
namespace 檢查網絡是否連通
{
class Program
{
static void Main(string[] args)
{
bool isConnectInternet = InternetGetConnectedState(0, 0);
if (isConnectInternet)
{
Console.WriteLine("已連通Internet網絡");
}
else {
Console.WriteLine("沒有連通Internet網絡");
}
bool b = PingIpOrDomainName("192.168.0.11");
if (b)
{
Console.WriteLine("已連通局域網絡");
}
else
{
Console.WriteLine("沒有連通局域網絡");
}
}
[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(int Description, int ReservedValue);
/// <summary>
/// 檢查網絡是否鏈接
/// </summary>
/// <returns></returns>
public static bool IsConnectInternet()
{
return InternetGetConnectedState(0, 0);
}
/// <summary>
/// 是否連接到服務器,true表示連接成功成功,false表示連接失敗
/// </summary>
/// <param name="strIpOrDName">輸入參數,表示IP地址或域名</param>
/// <returns></returns>
public static bool PingIpOrDomainName(string strIpOrDName)
{
try
{
Ping objPingSender = new Ping();
PingOptions objPinOptions = new PingOptions();
objPinOptions.DontFragment = true;
string data = "";
byte[] buffer = Encoding.UTF8.GetBytes(data);
int intTimeout = 120;
PingReply objPinReply = objPingSender.Send(strIpOrDName, intTimeout, buffer, objPinOptions);
string strInfo = objPinReply.Status.ToString();
// Console.WriteLine(strInfo);
if (strInfo == "Success")
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
}
}
}
完。