如何实时检测拨号网络的带宽 我也查过网络上的一些文章,有些是以“收到数据包”的数量来计算带宽的,但是现在带来一个问题:拨号网络建立了,但是没有进行数据传输,那么按照这个办法算出来的带宽是不是就是0或者很低?而实际上此时网络状况良好带宽很宽?请教各位高手:如何实时检测拨号连接的带宽,不受实际收发数据包数量的影响。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先用GetInterfaceInfo获取所有适配器列表(其中包括拨号网络)在针对每个适配器,用GetIfEntry获得每个适配器的详细信息这2个函数是iphlpapi中的函数,需要在代码前面包含头文件,并指明链接库文件#include <iphlpapi.h>#pragma comment(lib, "iphlpapi.lib")下面是我以前写过的部分代码: DWORD dwSize = 0; GetInterfaceInfo(NULL, &dwSize); if (dwSize <= 0) return; PIP_INTERFACE_INFO pIfTable = (PIP_INTERFACE_INFO)malloc(dwSize); if (!pIfTable) return; if (GetInterfaceInfo(pIfTable, &dwSize) != NO_ERROR) { free(pIfTable); return; } for (int i = 0; i < (int)pIfTable->NumAdapters; i++) { MIB_IFROW IfRow; IfRow.dwIndex = pIfTable->Adapter[i].Index; if (GetIfEntry(&IfRow) == NO_ERROR) { //在这里可以判断IfRow中的dwType,MIB_IF_TYPE_PPP是拨号 //ifRow.dwSpeed就是速率 } } free(pIfTable); 如果想检测本机网络接口当前的利用率,可以使用iphlpapi中提供的IP助手函数GetIfTable(), 可获取本机所有接口的标准带宽及当前已发送/接收的字节数, 单位时间内的发送/接收字节数之合即可认为是当前使用的网络带宽, 与前者相减可以得到当前闲置带宽。如果是想检测路由器/交换机/服务器的当前网络接口使用情况,可利用SNMP协议命令获取。条件,目标支持SNMP协议,且你对其拥有至少可读权限 用IpHelper系列函数获得网络参数,然后自己计算,获得当前网络利用率 对于路由器等,可以用SNMP协议,查找相应的oid,至于权限,现在的一般对于基本的查询还是允许的,community为public 想不出来啊。不过SNMP也只是一种算法上的估计吧。要算当前带宽,有能在这上面流数据,那怎么算法啊。再关注。 拨号后,获得的连接带宽,是双方modem(对方可能是isp的modem池)协商后确定的。一旦连接建立后,这个值不会改变。实际的2个modem之间的带宽变化,情况可能很复杂,有可能是线路质量、干扰信号等等造成的,再没有数据传输时,你根本无法确定。对方modem和internet(如果是拨入isp)上的某个地址之间的实际带宽,情况就更复杂了,可能是某个路由器负载过高、也许是你的邻居在下载电影 to iq199(iq199) :确实就是这个情况,现在只能获取建立连接时所约定的带宽,实际中的变化就不知道,晕 关于VC++ 连接SQL数据库做登陆界面问题 希望坛主帮忙删一下我06年发的水贴,放在网上影响不好,谢谢 tabview中的视图得不到m_pDocument? 请问怎样给IP控件加上背景色啊? 邮件包被拆分好几个数据包,怎么判断该封邮件包是最后一个邮件包 好象是SetWindowText函数问题,急,简单! 请问一个类型转换的小问题,比较困惑,惭愧 请问在非模式对话框里的以报表形式加入的CListCtrl如何改变他的显示内容吖 高手进,如何做像IE,资源浏览器中那种有抓手,和标题栏分开的菜单? 如何得到这个字符串中两个()之间的字符串 一个的奇怪的问题 可用分又涨到6k以上了,接着散
在针对每个适配器,用GetIfEntry获得每个适配器的详细信息
这2个函数是iphlpapi中的函数,需要在代码前面包含头文件,并指明链接库文件
#include <iphlpapi.h>
#pragma comment(lib, "iphlpapi.lib")下面是我以前写过的部分代码:
DWORD dwSize = 0;
GetInterfaceInfo(NULL, &dwSize);
if (dwSize <= 0) return;
PIP_INTERFACE_INFO pIfTable = (PIP_INTERFACE_INFO)malloc(dwSize);
if (!pIfTable)
return;
if (GetInterfaceInfo(pIfTable, &dwSize) != NO_ERROR)
{
free(pIfTable);
return;
}
for (int i = 0; i < (int)pIfTable->NumAdapters; i++)
{
MIB_IFROW IfRow;
IfRow.dwIndex = pIfTable->Adapter[i].Index;
if (GetIfEntry(&IfRow) == NO_ERROR)
{
//在这里可以判断IfRow中的dwType,MIB_IF_TYPE_PPP是拨号
//ifRow.dwSpeed就是速率
}
} free(pIfTable);
条件,目标支持SNMP协议,且你对其拥有至少可读权限
不过SNMP也只是一种算法上的估计吧。
要算当前带宽,有能在这上面流数据,那怎么算法啊。
再关注。
实际的2个modem之间的带宽变化,情况可能很复杂,有可能是线路质量、干扰信号等等造成的,再没有数据传输时,你根本无法确定。
对方modem和internet(如果是拨入isp)上的某个地址之间的实际带宽,情况就更复杂了,可能是某个路由器负载过高、也许是你的邻居在下载电影