【问题标题】:How do you detect dialup, broadband or wireless Internet connections in C++ for Windows?如何在 Windows 的 C++ 中检测拨号、宽带或无线 Internet 连接?
【发布时间】:2010-09-10 17:58:07
【问题描述】:

我有一个安装程序(只是一个常规的 C++ MFC 程序,不是基于 Windows Installer),它需要根据 Internet 连接的类型设置一些注册表值:宽带、拨号和/或无线。目前,这些信息是通过询问一系列是或否问题来确定的。问题是安装人员与拥有和使用计算机的人不同,因此他们并不总是确定这些问题的答案应该是什么。有没有办法以编程方式确定这些信息?该代码是用 C++(和可选的 MFC)编写的,适用于 Windows XP 及更高版本。基于 .NET 的解决方案不是一个选项,因为我不想在我们的安装程序运行之前确定是否安装了框架。

澄清一下,问题主要在于无线和拨号连接并非“始终在线”,这导致我们的产品需要以不同的方式运行,因为我们的服务器并非始终可用。因此,严格的速度测量解决方案无济于事,尽管有一个与速度相关的设置,因此产品在连接后不会尝试通过拨号连接发送 MB 的信息。

【问题讨论】:

    标签: c++ mfc windows-xp broadband


    【解决方案1】:

    [我不知道如何准确获取您所要求的信息,但是...] 也许您可以(为自己)重新表述您试图完成的事情?比如,不要问“用户有宽带还是拨号上网”,而是问“用户的互联网连接有多少带宽”——然后你可以尝试在没有任何用户输入的情况下回答改写后的问题(比如通过测量带宽)。

    顺便说一句。如果你只问用户“宽带还是拨号”,你可能会遇到一些问题:

    • 如果用户有一些您没有预料到的连接类型怎么办?
    • 如果用户不知道怎么办(因为只有一根以太网电缆连接到 PPPoE DSL 调制解调器/路由器)?
    • 如果用户通过一系列连接(通过拨号连接 VPN,连接到其他具有宽带的网络?)会怎样?

    在这些情况下,询问“能力”而不是“类型”可能更有用。

    【讨论】:

      【解决方案2】:

      使用 InternetGetConnectedState API 检索互联网连接状态。

      我测试了它,它工作正常。

      我发现这份文件可以提供帮助:

      http://www.pcausa.com/resources/InetActive.txt

      【讨论】:

        【解决方案3】:

        关于“互联网连接是否永久?”的问题:

        • 最好的方法可能是让应用程序足够强大,以始终处理非永久连接 :-) 这与拨号和宽带相同...
        • 或者,也许您可​​以找出用户的互联网连接已经建立了多长时间,并与系统正常运行时间进行比较?如果连接在计算机运行期间一直在线,则可能是永久连接。

        无论如何,这些启发式方法对于模糊的连接类型可能会失败。

        另外,关于不发送大量数据的一点:如果人们有“宽带+低流量限制”的资费,即使带宽允许,你也不应该发送大量数据:-)

        【讨论】:

        • 关于处理连接类型的程序设计要点。出现这种情况是有原因的,但如果不深入了解我在公共场合无法真正做到的应用程序的功能,就很难解释。
        【解决方案4】:

        最好的办法是获取默认的活动网络连接,确保它是互联网连接(ping google.com 或类似的),然后询问它是什么类型的设备。您应该能够从中确定用户有什么连接。

        我相当有信心这是可能的,但不知道如何去做。

        【讨论】:

        • 我试图避免保留设备及其类的列表,因为总会有人想出一个我没想到的,但我同意这可能是必要的.
        【解决方案5】:

        我认为你应该做一个快速的连接速度测试。只需下载一些特定大小的文件,需要多长时间,您就会知道速度。我同意其他人的观点,不要问他们有什么类型的连接,更重要的是速度。也许明年他们会推出 100mbit 拨号...你希望每个人都使用这个令人惊叹的新设备来获得你应用的低带宽版本吗?

        【讨论】:

          【解决方案6】:

          我同意 Oliver 的观点,正如您所暗示的那样:您已经具备应对连接丢失的功能,为什么不默认启用它。

          宽带连接可能会被搞砸:路由器软件死机(对我来说经常发生),或者电源适配器会炸……

          【讨论】:

            猜你喜欢
            • 2011-02-01
            • 2018-09-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-22
            • 2010-10-03
            • 1970-01-01
            • 2023-03-31
            相关资源
            最近更新 更多