C#检查网络是否连接的方法

2024-11-24 22:57:48
推荐回答(1个)
回答1:

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 通了!" 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(); }