C#通過系統API判斷網路連接類型及狀態

來源:互聯網
上載者:User

用ping命令判斷網路,但是這個實在是太不給力了,延遲時間長,於是我在網上查詢了下,發現可以用調用Windows API 內建的兩個動態串連庫調用判斷。

1. winInet.dll

2. sensapi.dll

先講第一個吧:

winInet.dll 可以調用 InternetGetConnectedState 方法

sensapi.dll 可以調用 IsNetworkAlive 方法

要想使用這兩個方法,必須先引入動態串連庫,

需要引用命名空間 using System.Runtime.InteropServices;

代碼如下:

方法1:

//引入API函數

[DllImport("wininet.dll")]

public static extern bool InternetGetConnectedState(out long lpdwFlags, long dwReserved);

public string JudgeOnLine()

{

int INTERNET_CONNECTION_MODEM = 1;

int INTERNET_CONNECTION_LAN = 2;

int INTERNET_CONNECTION_PROXY = 4;

int INTERNET_CONNECTION_MODEM_BUSY = 8;

int INTERNET_CONNECTION_OFFLINE = 32;

long lfag;

string ResultStr = "";

if (InternetGetConnectedState(out lfag, 0))

ResultStr = "網路連接正常!";

else

ResultStr = "網路連接不可用!";

if ((lfag & INTERNET_CONNECTION_OFFLINE) > 0)

ResultStr += "OFFLINE 本地系統處於離線模式。";

if ((lfag & INTERNET_CONNECTION_MODEM) > 0)

ResultStr += "Modem 本地系統使用數據機串連到互連網。";

if ((lfag & INTERNET_CONNECTION_LAN) > 0)

ResultStr += "LAN 本地系統使用的區域網路串連到互連網。";

if ((lfag & INTERNET_CONNECTION_PROXY) > 0)

ResultStr += "a Proxy";

if ((lfag & INTERNET_CONNECTION_MODEM_BUSY) > 0)

ResultStr += "Modem but modem is busy";

return ResultStr;

}

 

方法2:

[DllImport("sensapi.dll")]

private extern static bool IsNetworkAlive(out int connectionDescription);

private string Fun_IsNetworkAlive()

{

int NETWORK_ALIVE_LAN = 0;

int NETWORK_ALIVE_WAN = 2;

int NETWORK_ALIVE_AOL = 4;

string outPut = null;

//上網方式

int flags;

//是否線上

bool m_bOnline = true;

m_bOnline = IsNetworkAlive(out flags);

//線上

if (m_bOnline)

{

if ((flags & NETWORK_ALIVE_LAN) == NETWORK_ALIVE_LAN)

{

outPut = "聯機:LAN";

}

if ((flags & NETWORK_ALIVE_WAN) == NETWORK_ALIVE_WAN)

{

outPut = "聯機:WAN";

}

if ((flags & NETWORK_ALIVE_AOL) == NETWORK_ALIVE_AOL)

{

outPut = "聯機:AOL";

}

}

else

{

outPut = "離線:NoOnLine";

}

return outPut;

}

註: 經測試,這兩種方法都可以,但是第一種仍有延遲,建議使用第二種方法,響應比較及時

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.