博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 判断网络是否连接
阅读量:6673 次
发布时间:2019-06-25

本文共 3566 字,大约阅读时间需要 11 分钟。

在网上查到有几种方式检查网络是否连接,测试了一下,第一种方式受到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("采用网卡上网。");   }

  

转载于:https://www.cnblogs.com/zhangtao/archive/2011/09/08/2347512.html

你可能感兴趣的文章
HuaWei设置镜像和观察端口
查看>>
Linux命令之tr
查看>>
JSTL XML 学习备忘
查看>>
Scala 深入浅出实战经典 第80讲:List的泛型分析以及::类和Nil对象
查看>>
10.IPSec×××高可用性技术-链路备份
查看>>
我的友情链接
查看>>
destoon 读取当前栏目名称
查看>>
初步认识JPA
查看>>
Gson的使用-android
查看>>
我的友情链接
查看>>
HTC推出革新的HTC旗舰级Android智能手机
查看>>
BYOD管理套件VMware的捆绑应用程序
查看>>
java 通过httpClient调用后端逻辑或者下载附件
查看>>
Nagios集成Selenium
查看>>
快速大规模无光驱安装Linux操作系统就选“PXE自动安装”
查看>>
我的友情链接
查看>>
switch&router-四层模式
查看>>
新博安卓培训的第一天
查看>>
游戏中常用到的碰撞检测帮助类
查看>>
访问默认共享
查看>>