我正在Windows上开发一个c ++网络应用程序。我需要检查是否存在互联网连接。我正在使用gethostbyname(),但是当系统通过代理连接时,它提供的信息不正确。 InternetCheckConnection()和InternetGetConnectedState()在不同条件下也不能提供可靠的结果。有没有可靠的方法来检查覆盖所有条件的互联网连接,例如代理和VPN?
更新:
在我们公司的网络中,WinHttpGetProxyForUrl()失败,错误为ERROR_WINHTTP_AUTODETECTION_FAILED,WinHttpSendrequest()失败,错误为ERROR_WINHTTP_NAME_NOT_RESOLVED。
在开放网络中,WinHttpSendrequest()成功。
答案 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;
}
}