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

use*_*845 3 c++ windows networking

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

更新:

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

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

blu*_*001 6

简单的老路!

包括:

#include <wininet.h>
#pragma comment(lib,"Wininet.lib")
Run Code Online (Sandbox Code Playgroud)

在你的方法中:

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 !
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


use*_*421 5

测试任何资源可用性的最佳方法是尝试使用它。只有当您想要连接到互联网时,您才会关心互联网。因此,请尝试在程序的正常过程中连接到它,并处理错误。不要试图事后猜测如果你尝试的话会发生什么。首先,你试图预测未来。其次,您不一定要执行与实际连接执行的操作相同的操作。第三,您的测试可能会成功,但由于干预条件的变化,您的后续使用可能会失败。第四,无论如何,您都必须处理实际使用资源时出现的错误:为什么要将所有代码编写两次?


Som*_*ude 0

一个简单的解决方案是尝试连接到已知的主机,如果成功则说明已建立连接。