【问题标题】:Reliable method to check internet connection in C++ application: gethostbyname() failing在 C++ 应用程序中检查 Internet 连接的可靠方法:gethostbyname() 失败
【发布时间】:2012-08-01 05:18:53
【问题描述】:

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

更新:

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

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

【问题讨论】:

  • 听起来您在 Windows 平台上工作,但您可能希望在您的问题中明确说明这一点。任何答案都必然取决于操作系统。
  • 感谢@Greg。编辑并添加了 Windows。
  • 您如何定义“互联网连接”? gethostbyname() 给你什么不正确的信息?我认为大多数 LAN 都提供 DNS 服务,因此通常您会期望它可以工作,但这当然并不意味着您可以实际联系相关主机。
  • 你在使用 WinHttpGetDefaultProxyConfiguration 吗?系统代理设置是否正确定义,例如 Internet Explorer 是否正常工作?
  • 是的,系统代理设置已正确定义,Internet Explorer 正常工作。

标签: c++ windows networking


【解决方案1】:

简单的老方法!

包括:

#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 !
}

希望对你有帮助。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        HTH
        阿尼尔

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-07
          • 1970-01-01
          相关资源
          最近更新 更多