在C ++应用程序中检查Internet连接的可靠方法:gethostbyname()失败

时间:2012-08-01 05:18:53

标签: c++ windows networking

我正在Windows上开发一个c ++网络应用程序。我需要检查是否存在互联网连接。我正在使用gethostbyname(),但是当系统通过代理连接时,它提供的信息不正确。 InternetCheckConnection()和InternetGetConnectedState()在不同条件下也不能提供可靠的结果。有没有可靠的方法来检查覆盖所有条件的互联网连接,例如代理和VPN?

更新:

在我们公司的网络中,WinHttpGetProxyForUrl()失败,错误为ERROR_WINHTTP_AUTODETECTION_FAILED,WinHttpSendrequest()失败,错误为ERROR_WINHTTP_NAME_NOT_RESOLVED。

在开放网络中,WinHttpSendrequest()成功。

5 个答案:

答案 0 :(得分:6)

简单的老路!

包括:

#include <wininet.h>
#pragma comment(lib,"Wininet.lib")

在你的方法中:

char url[128];
strcat(url, "http://www.techtoolbox.com");
bool bConnect = InternetCheckConnection(url, FLAG_ICC_FORCE_CONNECTION, 0);


if (bConnect)
{
    //internet connection exists !
}
else
{
            //internet DOES NOT connection exists !
}

希望它有所帮助。

答案 1 :(得分:4)

测试任何资源可用性的最佳方法是尝试使用它。如果您想要连接的东西,您只关心互联网。因此,尝试在程序的正常过程中连接到它,并处理错误。不要试图猜测如果你尝试会发生什么。首先,你试图预测未来。其次,你不一定要运用与实际连接相同的东西。第三,您的测试可能会成功,并且您的后续使用会因干预条件的变化而失败。第四,你必须处理来自资源实际使用的错误:为什么要写两次所有代码?

答案 2 :(得分:0)

一个简单的解决方案是尝试连接到一个众所周知的主机,如果成功,那么你就有了连接。

答案 3 :(得分:0)

在我看来,一种方法是创建一个套接字并尝试连接已知主机。这些链接将有助于: 适用于Windows:http://msdn.microsoft.com/en-us/library/ms740673(VS.85).aspx和unix http://www.tenouk.com/cnlinuxsockettutorials.html

HTH
阿尼尔

答案 4 :(得分:0)

包括:

#include <wininet.h>
#pragma comment(lib,"Wininet.lib")

using namespace std;

方法

int main()
{
bool i_con = InternetCheckConnection(L"http:\\www.google.com", 
FLAG_ICC_FORCE_CONNECTION, 0);

if (i_con)
{
    cout << "You are connected to the Internet" << endl;
}
else
{
    cout << "You are not connected to the Internet" << endl;
}
}