4

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

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

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

我对 Win32/C++ 的答案最感兴趣,但任何想法都将不胜感激。

4

3 回答 3

6

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

Select * from Win32_PerfFormattedData_Tcpip_NetworkInterface
于 2009-05-11T18:27:11.027 回答
4

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

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

于 2009-05-11T18:26:29.327 回答
3

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

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

于 2009-05-11T18:22:35.697 回答