判断网络是否连接通

编写下载程序的时候,需要经常判断网络是否连接通,通过下面的方法可以得到网络连接的状态。

要用的函数:InternetGetConnectedState,这个win32 API在系统system32文件夹中winInet.dll中
函数原形:BOOL InternetGetConnectedState(LPDWORD dwFlag,DWORD dwReserved);
参数dwFlag返回当前网络状态,参数dwReserved依然是保留参数,设置为0即可。

INTERNET_CONNECTION_MODEM = 采用调治解调器上网
INTERNET_CONNECTION_LAN = 采用网卡上网;
INTERNET_CONNECTION_PROXY = 采用代理上网;
INTERNET_CONNECTION_MODEM_BUSY = MODEM被其他非INTERNET连接占用;

public class InternetHelper
    {
        //使用DllImport需导入命名空间,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);

        /// <summary>
        /// 判断是否有网络连接
        /// </summary>
        /// <returns>true 有, false 无</returns>
        public static bool GetInternetConnectState()
        {
            var dwFlag = 0;
            var netStatus = "";

            if (!InternetGetConnectedState(ref dwFlag, 0))
            {
                return false;
            }

            if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0) netStatus = "采用调治解调器上网";
            if ((dwFlag & INTERNET_CONNECTION_LAN) != 0) netStatus = "采用网卡上网";
            if ((dwFlag & INTERNET_CONNECTION_PROXY) != 0) netStatus = "采用代理上网";
            if ((dwFlag & INTERNET_CONNECTION_MODEM_BUSY) != 0) netStatus = "MODEM被其他非INTERNET连接占用";
            return true;
        }
    }

posted on 2012-10-12 17:27  guyichang  阅读(1040)  评论(0编辑  收藏  举报

导航