API列表
// 功能:判断本机是否处于联网状态
// 返回值:如果成功,返回ERROR_SUCCESS,否则返回错误码
DWORD InternetAttemptConnect(
_In_ DWORD dwReserved // 保留值,必须为0
);
不过奇怪的是我把网卡禁用,把网线拔了,这个函数都返回ERROR_SUCCESS ,不知所以。
// 使用ping的方式检查本机是否可以联网,效率你懂得。
// 返回值:如果ping通了,返返回TRUE表示可以联网,否则返回FALSE
BOOL InternetCheckConnection(
_In_ LPCTSTR lpszUrl, // Url地址,必须加http://且不能是IP地址
_In_ DWORD dwFlags, // 0或者FLAG_ICC_FORCE_CONNECTION,后者表示强制建立一个连接
_In_ DWORD dwReserved // 保留值
);
使用示例:
BOOL bRet = FALSE;
//dwRet = InternetAttemptConnect(NULL);
bRet = InternetCheckConnection(_TEXT("***"), FLAG_ICC_FORCE_CONNECTION, 0);
if(bRet != TRUE)
{
printf("不能连接到网络!\n");
return 0;
}
代码结果是没有输出任何信息的,表示可以联网。
// 打开一个网络会话句柄,该函数不会测试网络是否联通
// 返回值:如果打开成功返回会话句柄,否则返回NULL
HINTERNET InternetOpen(
_In_ LPCTSTR lpszAgent, // 代理名称
_In_ DWORD dwAccessType, // 访问权限
_In_ LPCTSTR lpszProxyName, // 一般设为0,如果dwAccessType为INTERNET_OPEN_TYPE_PROXY,此处设置为代理服务器名称
_In_ LPCTSTR lpszProxyBypass, // 一般设为0,如果dwAccessType为INTERNET_OPEN_TYPE_PROXY,此处设置为主机地址或者IP地址的列表
_In_ DWORD dwFlags // 连接标志,支持的标志选项可组合
);
微软给出的示例:
HINTERNET hInternetRoot;
/* bypass the proxy for any host name that does not
contain a period */
hInternetRoot = InternetOpen(TEXT("WinInet Example"),
INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("<local>"), 0);
/* bypass the proxy for any host name that starts with the
letters "ms" */
hInternetRoot = InternetOpen(TEXT("WinInet Example"),
INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("ms*"), 0);
/* bypass the proxy for any host name that contains "int",
such as "internet" and "painter" */
hInternetRoot = InternetOpen(TEXT("WinInet Example"),
INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("*int*"), 0);
/* bypass the proxy for the host name "example" and any
host name that contains "test" */
hInternetRoot = InternetOpen(TEXT("WinInet Example"),
INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("example *test*"), 0);
/* Disable the loopback proxy bypass for localhost */
hInternetRoot = InternetOpen(TEXT("WinInet Example"),
INTERNET_OPEN_TYPE_PROXY,TEXT("127.0.0.1:8888"),TEXT("<-loopback>"), 0);
我自己使用的示例:
// 打开初始化程序的网络连接
hInternet = InternetOpen( _TEXT("httpDownload"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 );
if ( NULL == hInternet )
{
printf("打开网络失败!\n");
return 0;
}
- InternetConnect
功能:根据指定的地址打开一个FTP、HTTP等类型的连接
返回值:成功返回连接句柄,失败返回NULL
HINTERNET InternetConnect(
_In_ HINTERNET hInternet, // 会话句柄(InternetOpen返回)
_In_ LPCTSTR lpszServerName, // 地址,IP地址也行
_In_ INTERNET_PORT nServerPort, // 端口号
_In_ LPCTSTR lpszUsername, // 用户名
_In_ LPCTSTR lpszPassword, // 密码
_In_ DWORD dwService, // 服务类型:FTP,HTTP或者GOPHER
_In_ DWORD dwFlags, // 一般使用0
_In_ DWORD_PTR dwContext // 一般使用0
);
除非是FTP类型的连接,否则这个函数不会尝试或者建立目标地址的连接,他只负责初始化会话。使用示例://打开连接
HINTERNET hConnect = NULL;
hConnect = InternetConnect(hInternet, _TEXT("www.baidu.com"), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
if(NULL == hConnect)
{
printf("打开网络连接失败!\n");
return 0;
}