c# 判断网络是否连接
在网上查到有几种方式检查网络是否连接,测试了一下,第一种方式受到ping时延的影响,在某些不支持ping的地址或者网段甚至不可用,因此建议采用方法2 |
1. 调用 cmd 中的 ping 命令,分析输出信息来确定网络是否连接 |
// 使用 ping 命令来判断 ,txtIP 文本框输入一个有效的远程主机 ip |
System.Diagnostics.Process proIP= new System.Diagnostics.Process(); |
proIP.StartInfo.FileName= "cmd.exe" ; |
proIP.StartInfo.UseShellExecute = false ; |
proIP.StartInfo.RedirectStandardInput = true ; |
proIP.StartInfo.RedirectStandardOutput = true ; |
proIP.StartInfo.RedirectStandardError = true ; |
proIP.StartInfo.CreateNoWindow = true ; // 不显示 cmd 窗口 |
proIP.Start(); |
proIP.StandardInput.WriteLine( "ping " + this .txtIP.Text.Trim()); |
proIP.StandardInput.WriteLine( "exit" ); |
string strResult=proIP.StandardOutput.ReadToEnd(); |
if (strResult.IndexOf( "(0% loss)" )!=-1) |
this .txtShow.Text= "Ping 通了! " ; |
else if (strResult.IndexOf( "(100% loss)" )!=-1) |
this .txtShow.Text= " 无法 Ping 通! " ; |
else |
this .txtShow.Text= " 数据有丢失! " |
proIP.Close(); |
2. 使用InternetGetConnectedState () 函数 |
这个win32 API 在系统 system32 文件夹中 winInet.dll 中 ,可以用来判断是否联网和上网的方式是 Modem 还是 LAN 等 |
//使用DllImport需导入命名空间 |
using System.Runtime.InteropServices; |
//InternetGetConnectedState返回的状态标识位的含义: |
private const int INTERNET_CONNECTION_MODEM = 1; |
private const int INTERNET_CONNECTION_LAN = 2; |
private const int INTERNET_CONNECTION_PROXY = 4; |
private const int INTERNET_CONNECTION_MODEM_BUSY = 8; |
[DllImport( "winInet.dll " )] |
//声明外部的函数: |
private static extern bool InternetGetConnectedState( |
ref int dwFlag, |
int dwReserved |
); |
static void Main( string [] args) |
{ |
int dwFlag = 0; |
string netstatus = "" ; |
if (!InternetGetConnectedState( ref dwFlag, 0)) |
Console.WriteLine( "未联网!" ); |
else |
{ |
if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0) |
netstatus += " 采用调治解调器上网 \n" ; |
if ((dwFlag & INTERNET_CONNECTION_LAN) != 0) |
netstatus += " 采用网卡上网 \n" ; |
if ((dwFlag & INTERNET_CONNECTION_PROXY) != 0) |
netstatus += " 采用代理上网 \n" ; |
if ((dwFlag & INTERNET_CONNECTION_MODEM_BUSY) != 0) |
netstatus += " MODEM被其他非INTERNET连接占用 \n" ; |
} |
Console.WriteLine(netstatus); |
Console.ReadLine(); |
} |
win32 API函数的做法: |
要用的函数:InternetGetConnectedState |
函数原形:BOOL InternetGetConnectedState(LPDWORD lpdwFlags,DWORD dwReserved); |
参数lpdwFlags返回当前网络状态,参数dwReserved依然是保留参数,设置为0即可。 |
INTERNET_CONNECTION_MODEM 通过调治解调器连接网络 |
INTERNET_CONNECTION_LAN 通过局域网连接网络 |
这个函数的功能是很强的。它可以: |
1. 判断网络连接是通过网卡还是通过调治解调器 |
2. 是否通过代理上网 |
3. 判断连接是On Line还是Off Line |
4. 判断是否安装“拨号网络服务” |
5. 判断调治解调器是否正在使用 |
这个win32 API在系统system32文件夹中winInet.dll中 |
使用这个判断的话,需要在类中这样写: |
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 |
); |
//调用的方法(Winform为例,放一个按钮,单击即可): |
private void button1_Click( object sender, System.EventArgs e){ |
System.Int32 dwFlag = new int (); |
if (!InternetGetConnectedState( ref dwFlag, 0)) |
MessageBox.Show( "未连网!" ); |
else |
if ((dwFlag & INTERNET_CONNECTION_MODEM)!=0) |
MessageBox.Show( "采用调治解调器上网。" ); |
else |
if ((dwFlag & INTERNET_CONNECTION_LAN)!=0) |
MessageBox.Show( "采用网卡上网。" ); |
} |
- 上一篇 »PHP连接数据库步骤以及判断是否有值!
- 下一篇 »C# 判断字符串是否可以转化为数字