在网上查到有几种方式检查网络是否连接,测试了一下,第一种方式受到ping时延的影响,在某些不支持ping的地址或者网段甚至不可用,因此建议采用方法2 |
1.调用cmd中的ping命令,分析输出信息来确定网络是否连接 |
//使用ping命令来判断,txtIP文本框输入一个有效的远程主机ip |
System.Diagnostics.ProcessproIP= 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.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通!" ; |
this .txtShow.Text= "数据有丢失!" |
2.使用InternetGetConnectedState()函数 |
这个win32API在系统system32文件夹中winInet.dll中,可以用来判断是否联网和上网的方式是Modem还是LAN等 |
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( |
static void Main( string []args) |
if (!InternetGetConnectedState( ref dwFlag,0)) |
Console.WriteLine( "未联网!" ); |
if ((dwFlag&INTERNET_CONNECTION_MODEM)!=0) |
netstatus+= "采用调治解调器上网\n" ; |
if ((dwFlag&INTERNET_CONNECTION_LAN)!=0) |
if ((dwFlag&INTERNET_CONNECTION_PROXY)!=0) |
if ((dwFlag&INTERNET_CONNECTION_MODEM_BUSY)!=0) |
netstatus+= "MODEM被其他非INTERNET连接占用\n" ; |
Console.WriteLine(netstatus); |
要用的函数:InternetGetConnectedState |
函数原形:BOOLInternetGetConnectedState(LPDWORDlpdwFlags,DWORDdwReserved); |
参数lpdwFlags返回当前网络状态,参数dwReserved依然是保留参数,设置为0即可。 |
INTERNET_CONNECTION_MODEM通过调治解调器连接网络 |
INTERNET_CONNECTION_LAN通过局域网连接网络 |
这个win32API在系统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( |
//调用的方法(Winform为例,放一个按钮,单击即可): |
private void button1_Click( object sender,System.EventArgse){ |
System.Int32dwFlag= new int (); |
if (!InternetGetConnectedState( ref dwFlag,0)) |
if ((dwFlag&INTERNET_CONNECTION_MODEM)!=0) |
MessageBox.Show( "采用调治解调器上网。" ); |
if ((dwFlag&INTERNET_CONNECTION_LAN)!=0) |
MessageBox.Show( "采用网卡上网。" ); |
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理