zoukankan      html  css  js  c++  java
  • c# 判断网络是否连接

    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("采用网卡上网。");  
    }  

    在C#中可以使用多种方法来判断网络的连接状态,比如使用WIN32的API来判断,也可以直接Ping某个网址来判断。

    下面来介绍下我最进行写的一个判断网络连接的方法类,使用了Wine32的API函数与Ping.Send结合的方法,代码如下:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.Net.NetworkInformation;

    namespace TestNetConnectWin32
    {
        public class GetInternetConStatus
        {
            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
            );

            /// <summary>
            /// 判断网络的连接状态
            /// </summary>
            /// <returns>
            /// 网络状态(1-->未联网;2-->采用调治解调器上网;3-->采用网卡上网)
            ///</returns>
            public static int GetNetConStatus(string strNetAddress)
            {
                int iNetStatus = 0;
                System.Int32 dwFlag = new int();
                if (!InternetGetConnectedState(ref dwFlag, 0))
                {  
                    //没有能连上互联网
                    iNetStatus = 1;
                }
                else if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0)
                {
                    //采用调治解调器上网,需要进一步判断能否登录具体网站
                    if (PingNetAddress(strNetAddress))
                    {
                        //可以ping通给定的网址,网络OK
                        iNetStatus = 2;
                    }
                    else
                    {
                        //不可以ping通给定的网址,网络不OK
                        iNetStatus = 4;
                    }
                }
                
                else if ((dwFlag & INTERNET_CONNECTION_LAN) != 0)
                {
                    //采用网卡上网,需要进一步判断能否登录具体网站
                    if (PingNetAddress(strNetAddress))
                    {
                        //可以ping通给定的网址,网络OK
                        iNetStatus = 3;
                    }
                    else
                    {
                        //不可以ping通给定的网址,网络不OK
                        iNetStatus = 5;
                    }
                }

                return iNetStatus;
            }

            /// <summary>
            /// ping 具体的网址看能否ping通
            /// </summary>
            /// <param name="strNetAdd"></param>
            /// <returns></returns>
            private static bool PingNetAddress(string strNetAdd)
            {
                bool Flage = false;
                Ping ping = new Ping();
                try
                {
                    PingReply pr = ping.Send(strNetAdd, 3000);
                    if (pr.Status == IPStatus.TimedOut)
                    {
                        Flage = false;
                    }
                    if (pr.Status == IPStatus.Success)
                    {
                        Flage = true;
                    }
                    else
                    {
                        Flage = false;
                    }
                }
                catch
                {
                    Flage = false;
                }
                return Flage;
            }

        }
    }
    //判断方法
     private void btnJudge_Click(object sender, EventArgs e)
            {
                int iNetStatus = GetInternetConStatus.GetNetConStatus("baidu.com");
                if (iNetStatus == 1)
                {
                    lblNetStatus.Text = "网络未连接";
                }
                else if(iNetStatus==2)
                {
                    lblNetStatus.Text = "采用调治解调器上网";
                }
                else if (iNetStatus == 3)
                {
                    lblNetStatus.Text = "采用网卡上网";
                }
                else if (iNetStatus == 4)
                {
                    lblNetStatus.Text = "采用调治解调器上网,但是联不通指定网络";
                }
                else if (iNetStatus == 5)
                {
                    lblNetStatus.Text = "采用网卡上网,但是联不通指定网络";
                }
            }

  • 相关阅读:
    SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问
    谷歌浏览器扩展程序manifest.json参数详解
    获取天气api
    UVA 10385 Duathlon
    UVA 10668 Expanding Rods
    UVALIVE 3891 The Teacher's Side of Math
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 11210 Chinese Mahjong
    UVA 11384 Help is needed for Dexter
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/2816221.html
Copyright © 2011-2022 走看看