【问题标题】:How to programmatically check Internet bandwidth in VC++?如何在 VC++ 中以编程方式检查 Internet 带宽?
【发布时间】:2010-10-18 06:24:12
【问题描述】:

我需要找到在特定时间可用的带宽。代码必须在 Visual C++ 或 .Net 系列中开发。如果有人知道怎么做,请帮帮我。

【问题讨论】:

  • 由于此类问题的性质,您应该真正解释您想要/需要知道的原因,因为可能有一种方法可以在不知道确切可用带宽的情况下解决此问题

标签: c++ visual-studio winapi mfc


【解决方案1】:

检查带宽的唯一方法是实际尝试使用它,即从其他地方下载文件并测量吞吐量。

即使这样也只是一个近似值,因为其他网络效应会影响结果:

  • 延迟
  • 非对称上传/下载
  • 其他流量

【讨论】:

  • + 确保每次自动生成文件 URL 以防止缓存。
  • 如果他自己从自己的代码中下载文件,那么缓存将不是问题
  • 虽然如果你使用 HTTP 下载,你可能会被透明代理捕获,因此 URL 应该包含一个随机部分以防止任何缓存命中。
  • 只要透明代理位于最近链路的另一端,这是一件好的事情 - 它会消除测量中的远端带宽限制。
【解决方案2】:

即使使用带宽,检查带宽也会很棘手。例如,如果您尝试从远程机器 X 下载数据并且您估计 N Kbs 的数字,那么您如何知道这是您的带宽限制还是远程机器 X 的连接限制?

您需要同时启动多台远程计算机的同时下载(或上传,如果这是您想要测量的方向),并不断增加负载,直到吞吐量停止增加。

但正如 Alnitak 所说,您仍然不知道还有哪些其他因素可能会影响结果。例如,您的机器上是否有其他进程使用该连接?还是隔壁的孩子在您的无线局域网上捎带并窃取您的带宽?也许这就是你想要找出的!

【讨论】:

    【解决方案3】:

    如果您指的是当前网络利用率,您可以致电

    DeviceIoControl(hDevice,OID_GEN_STATISTICS, ...)

    在 Vista 及更高版本上获取特定于设备的信息。否则,请致电 GetIpStatisticsEx 以获取系统范围的信息或使用 WMI 的 Win32_PerfRawData_Tcpip_NetworkInterface。

    试图通过使连接饱和来获得“可用”带宽不是明智或可靠的措施。只需尝试一些可用的在线速度测试,并考虑它涉及不可扩展的带宽,并且容易受到拥塞控制、QoS 和流量整形的影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2012-03-10
      • 2012-08-28
      相关资源
      最近更新 更多