使用InternetGetConnectedState判断本地网络状态(C#举例)

函数原型:函数InternetGetConnectedState返回本地系统的网络连接状态。

语法:

BOOL InternetGetConnectedState(

__out LPDWORD lpdwFlags,

__in DWORD dwReserved

);

参数:

lpdwFlags[out]

指向一个变量,该变量接收连接描述内容。该参数在函数返回FLASE时仍可以返回一个有效的标记。该参数可以为下列值的一个或多个



含义

INTERNET_CONNECTION_CONFIGURED

0x40(64)


Local system has a valid connection to the Internet, but it might or might not be currently connected.

INTERNET_CONNECTION_LAN

0x02(2)


Local system uses a local area network to connect to the Internet.

INTERNET_CONNECTION_MODEM0

x01(1)


Local system uses a modem to connect to the Internet.

INTERNET_CONNECTION_MODEM_BUSY0

x08(8)


No longer used.

INTERNET_CONNECTION_OFFLINE

0x20(16)


Local system is in offline mode.

INTERNET_CONNECTION_PROXY

0x04(4)


Local system uses a proxy server to connect to the Internet.

INTERNET_RAS_INSTALLED

0x10(8)


Local system has RAS installed.

dwReserved[in]

保留值。必须为0。

当存在一个modem或一个LAN连接时,返回TRUE,当不存在internet连接或所有的连接当前未被激活时,返回false。

当该函数返回false时,程序可以调用GetLastError来接收错误代码。

运行效果:

代码:

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

namespace ConsoleApplication1
{
    class Program
    {
        public static void Main(string[] args)
        {
            string url = "www.baidu.com;www.sina.com;www.cnblogs.com;www.google.com;www.163.com;www.csdn.com";
            string[] urls = url.Split(new char[] { ‘;‘ });
            CheckServeStatus(urls);

            Console.ReadKey();
        }

        /// <summary>
        /// 检测网络连接状态
        /// </summary>
        /// <param name="urls"></param>
        public static void CheckServeStatus(string[] urls)
        {
            int errCount = 0;//ping时连接失败个数

            if (!LocalConnectionStatus())
            {
                Console.WriteLine("网络异常~无连接");
            }
            else if (!MyPing(urls, out errCount))
            {
                if ((double)errCount / urls.Length >= 0.3)
                {
                    Console.WriteLine("网络异常~连接多次无响应");
                }
                else
                {
                    Console.WriteLine("网络不稳定");
                }
            }
            else
            {
                Console.WriteLine("网络正常");
            }
        }

        #region 网络检测

         private const int INTERNET_CONNECTION_MODEM = 1;
        private const int INTERNET_CONNECTION_LAN = 2;

        [System.Runtime.InteropServices.DllImport("winInet.dll")]
        private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved);

        /// <summary>
        /// 判断本地的连接状态
         /// </summary>
        /// <returns></returns>
        private static bool LocalConnectionStatus()
        {
            System.Int32 dwFlag = new Int32();
            if (!InternetGetConnectedState(ref dwFlag, 0))
            {
                Console.WriteLine("LocalConnectionStatus--未连网!");
                return false;
            }
            else
            {
                if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0)
                {
                    Console.WriteLine("LocalConnectionStatus--采用调制解调器上网。");
                    return true;
                }
                else if ((dwFlag & INTERNET_CONNECTION_LAN) != 0)
                {
                    Console.WriteLine("LocalConnectionStatus--采用网卡上网。");
                    return true;
                }
            }
            return false;
        }

        /// <summary>
        /// Ping命令检测网络是否畅通
        /// </summary>
        /// <param name="urls">URL数据</param>
        /// <param name="errorCount">ping时连接失败个数</param>
        /// <returns></returns>
        public static bool MyPing(string[] urls, out int errorCount)
        {
            bool isconn = true;
            Ping ping = new Ping();
            errorCount = 0;
            try
            {
                PingReply pr;
                for (int i = 0; i < urls.Length; i++)
                {
                    pr = ping.Send(urls[i]);
                    if (pr.Status != IPStatus.Success)
                    {
                        isconn = false;
                        errorCount++;
                    }
                    Console.WriteLine("Ping " + urls[i] + "    " + pr.Status.ToString());
                }
            }
            catch
            {
                isconn = false;
                errorCount = urls.Length;
            }
            //if (errorCount > 0 && errorCount < 3)
            //  isconn = true;
            return isconn;
        }

        #endregion
    }
}

使用InternetGetConnectedState判断本地网络状态(C#举例)

时间: 2024-10-24 12:58:43

使用InternetGetConnectedState判断本地网络状态(C#举例)的相关文章

iOS 判断当前网络状态

1.如果只判断当前是否是无网的状态: if([Reachability reachabilityForLocalWiFi].currentReachabilityStatus==NotReachable&&[[Reachability reachabilityForInternetConnection] currentReachabilityStatus]==NotReachable) { //没网的操作 }else { //有网的操作 } 2.监听网络状态的改变 导入头文件 #impor

判断Android网络状态信息-wifi,3g/4g 和定位方式-gps,network,passive

我们项目的工具类中,这些方法应该是常驻方法,因为他们太常用了,一方面将这些方法总结在这篇文章中,以便于自己日后使用,另一方面也给大家提供个方便,省的每次到处去找了. 1.判断当前是否已经连网 不管连接的是WIFI还是移动网络,最终都会返回true,否则返回false public static boolean isNetworkAvailable(Context context){ if (context!=null) { //获取系统服务 ConnectivityManager cm = (C

android判断当前网络状态及跳转到设置界面

今天,想做这个跳转到网络设置界面, 刚开始用 intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 不料老是出现settings.WirelessSettings找不到(就是没法提示出来,显示红色底纹),我后来查了下资料,结果发现跟版本有关,我的是安卓4.3的,所以需要用                         intent = new Intent(android.provider.Settings.ACTION_WIRELES

C#检测本地网络状态

using System; using System.Runtime.InteropServices; public static class NetTool { [Flags] private enum ConnectionState { INTERNET_CONNECTION_MODEM = 0x1, INTERNET_CONNECTION_LAN = 0x2, INTERNET_CONNECTION_PROXY = 0x4, INTERNET_RAS_INSTALLED = 0x10, I

判断手机网络状态

1 public static boolean isNetworkAvailable(Context context) { 2 ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 3 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//版本

获取系统的网络状态与无线网的信号强度

一台电脑,有时通过有线网连接网络(调制解调器/局域网),如有网卡也可连接wifi.那么如何获取WLAN是否连接,和相应的信号强度呢? 就以下俩点: 获取电脑连网状态 获取无线网络的信号强度 获取电脑连网状态 在看下文之前,可以浏览:通过InternetGetConnectedState方法对网络状态的获取 如上InternetGetConnectedState方法介绍中 dwReversed必须设置为0 通过输出值lpdwFlags可以获取当前网络连接的信息,通过拼装对比可以得到当前连接的网络类

判断有无网络

实现步骤: 1.获取ConnectivityManager对象 Context context = activity.getApplicationContext(); // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理) ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 2.获取Network

Android笔记之网络状态

先上一个工具类的代码: package com.yonyou.util; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; /** * 判断当前网络状态 * @author xxx * */ public class NetWorkUtil { static NetWorkUtil netWorkUtil; private NetWorkU

Android中判断当前网络是否可用

当前有可用网络,如下图: 当前没有可用网络,如下图: 实现步骤: 1.获取ConnectivityManager对象 Context context = activity.getApplicationContext(); // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理) ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECT