C#中判断系统的网络连接状态的方法
???????? 在C#中可以使用多種方法來判斷網絡的連接狀態,比如使用WIN32的API來判斷,也可以直接Ping某個網址來判斷。
下面來介紹下我最進行寫的一個判斷網絡連接的方法類,使用了Wine32的API函數與Ping.Send結合的方法,代碼如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Net.NetworkInformation;
namespace TestNetConnectWin32
{
??? public class GetInternetConStatus
??? {
??????? private const int INTERNET_CONNECTION_MODEM = 1;
??????? private const int INTERNET_CONNECTION_LAN = 2;
??????? [DllImport("winInet.dll")]
??????? private static extern bool InternetGetConnectedState(
??????? ref?? int dwFlag,
??????? int dwReserved
??????? );
??????? /// <summary>
??????? /// 判斷網絡的連接狀態
??????? /// </summary>
??????? /// <returns>
??????? /// 網絡狀態(1-->未聯網;2-->采用調治解調器上網;3-->采用網卡上網)
??????? ///</returns>
??????? public static int GetNetConStatus(string strNetAddress)
??????? {
??????????? int iNetStatus = 0;
??????????? System.Int32 dwFlag = new int();
??????????? if (!InternetGetConnectedState(ref dwFlag, 0))
??????????? { ?
??????????????? //沒有能連上互聯網
??????????????? iNetStatus = 1;
??????????? }
??????????? else if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0)
??????????? {
??????????????? //采用調治解調器上網,需要進一步判斷能否登錄具體網站
??????????????? if (PingNetAddress(strNetAddress))
??????????????? {
??????????????????? //可以ping通給定的網址,網絡OK
??????????????????? iNetStatus = 2;
??????????????? }
??????????????? else
??????????????? {
??????????????????? //不可以ping通給定的網址,網絡不OK
??????????????????? iNetStatus = 4;
??????????????? }
??????????? }
?????????? ?
??????????? else if ((dwFlag & INTERNET_CONNECTION_LAN) != 0)
??????????? {
??????????????? //采用網卡上網,需要進一步判斷能否登錄具體網站
??????????????? if (PingNetAddress(strNetAddress))
??????????????? {
??????????????????? //可以ping通給定的網址,網絡OK
??????????????????? iNetStatus = 3;
??????????????? }
??????????????? else
??????????????? {
??????????????????? //不可以ping通給定的網址,網絡不OK
??????????????????? iNetStatus = 5;
??????????????? }
??????????? }
??????????? return iNetStatus;
??????? }
??????? /// <summary>
??????? /// ping 具體的網址看能否ping通
??????? /// </summary>
??????? /// <param name="strNetAdd"></param>
??????? /// <returns></returns>
??????? private static bool PingNetAddress(string strNetAdd)
??????? {
??????????? bool Flage = false;
??????????? Ping ping = new Ping();
??????????? try
??????????? {
??????????????? PingReply pr = ping.Send(strNetAdd, 3000);
??????????????? if (pr.Status == IPStatus.TimedOut)
??????????????? {
??????????????????? Flage = false;
??????????????? }
??????????????? if (pr.Status == IPStatus.Success)
??????????????? {
??????????????????? Flage = true;
??????????????? }
??????????????? else
??????????????? {
??????????????????? Flage = false;
??????????????? }
??????????? }
??????????? catch
??????????? {
??????????????? Flage = false;
??????????? }
??????????? return Flage;
??????? }
??? }
}
//判斷方法
?private void btnJudge_Click(object sender, EventArgs e)
??????? {
??????????? int iNetStatus = GetInternetConStatus.GetNetConStatus("baidu.com");
??????????? if (iNetStatus == 1)
??????????? {
??????????????? lblNetStatus.Text = "網絡未連接";
??????????? }
??????????? else if(iNetStatus==2)
??????????? {
??????????????? lblNetStatus.Text = "采用調治解調器上網";
??????????? }
??????????? else if (iNetStatus == 3)
??????????? {
??????????????? lblNetStatus.Text = "采用網卡上網";
??????????? }
??????????? else if (iNetStatus == 4)
??????????? {
??????????????? lblNetStatus.Text = "采用調治解調器上網,但是聯不通指定網絡";
??????????? }
??????????? else if (iNetStatus == 5)
??????????? {
??????????????? lblNetStatus.Text = "采用網卡上網,但是聯不通指定網絡";
??????????? }
??????? }
轉載于:https://www.cnblogs.com/kevinGao/archive/2011/11/18/2270750.html
總結
以上是生活随笔為你收集整理的C#中判断系统的网络连接状态的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 弹出框页面中使用jquery.valid
- 下一篇: Android之Handler用法总结(