【问题标题】:Determine network interface bandwidth/type without transferring data在不传输数据的情况下确定网络接口带宽/类型
【发布时间】:2009-05-11 18:20:56
【问题描述】:

在 Win32 中是否有任何方法可以在不实际传输任何数据的情况下以编程方式确定给定网络接口的带宽?我只想区分不同类型的接口(例如拨号、DSL 和 LAN),所以粗略的数量级就可以了,我不需要实际测量带宽。

问题的背景是我的应用程序非常需要带宽,如果他们尝试在低带宽接口上运行它,我想向用户显示警告,例如拨号调制解调器或 GPRS 调制解调器。

我查看了其他一些related questions,但如果可能的话,我想避免测量吞吐量。特别是 GPRS 调制解调器可能有使用上限,我不想吃掉用户的津贴 - 我宁愿以其他方式检测连接不良,并且根本不发送任何数据。

我对 Win32/C++ 答案最感兴趣,但如果有任何想法,我们将不胜感激。

【问题讨论】:

  • 我可以在不测量的情况下测量一些东西吗?没有。
  • 我想要一个粗略的数量级,而不是一个测量值。必须有某种方法来区分拨号、DSL 和 LAN。

标签: c++ winapi networking bandwidth


【解决方案1】:

您可以使用 WMI 查询,当然也有 Win32 函数调用,但是这个查询:

Select * from Win32_PerfFormattedData_Tcpip_NetworkInterface

【讨论】:

    【解决方案2】:

    您可以使用InternetGetConnectedState 来确定连接类型(LAN/调制解调器/等)。这将告诉您他们是否有相当不错的(非调制解调器)连接而没有带宽传输。

    不幸的是,如果不连接和传输数据,您将无法做到更多。系统无法知道其 LAN 连接之外的带宽限制 - 即:您可以直接连接到 LAN 上的网关,并且它与外部世界的连接可能很糟糕。不过,就您的计算机而言,它是在全速局域网连接上...

    【讨论】:

    • InternetGetConnectedState 是一个很好的建议 - 谢谢。我愿意冒险继续建立联系,我想要的只是一个尽力而为的解决方案。
    【解决方案3】:

    为什么不询问用户?他应该知道的。

    您的应用可以缓存网络地址的信息,并且只会再次询问网络地址是否已更改。

    【讨论】:

    • 如果没有自动的方法来实现这一点,这很可能是我的后备选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多