用c++代码获取本机带宽使用占比,不使用GetPerTcpConnectionEStats函数
时间: 2024-02-10 14:10:35 浏览: 138
2.4 sqrt_c++sqrt函数使用简介_
5星 · 资源好评率100%
可以使用Windows API中的GetIfTable和GetIfEntry函数来获取本机的网络接口信息,包括接口名称、接口类型、接口状态、接口IP地址等。通过这些信息,可以计算出本机的带宽使用占比。
以下是示例代码:
```c++
#include <iostream>
#include <windows.h>
#include <iphlpapi.h>
#pragma comment(lib, "iphlpapi.lib")
int main()
{
MIB_IFTABLE *pIfTable = NULL;
DWORD dwSize = 0;
// 获取接口表大小
if (GetIfTable(pIfTable, &dwSize, FALSE) == ERROR_INSUFFICIENT_BUFFER)
{
pIfTable = (MIB_IFTABLE*)new BYTE[dwSize];
if (GetIfTable(pIfTable, &dwSize, FALSE) != NO_ERROR)
{
std::cerr << "Failed to get interface table." << std::endl;
delete[] pIfTable;
return -1;
}
}
// 遍历接口表
for (DWORD i = 0; i < pIfTable->dwNumEntries; i++)
{
MIB_IFROW &ifRow = pIfTable->table[i];
// 过滤非物理接口
if (ifRow.dwType != IF_TYPE_ETHERNET_CSMACD)
continue;
// 过滤未连接的接口
if (ifRow.dwOperStatus != IF_OPER_STATUS_OPERATIONAL)
continue;
// 获取接口的发送和接收字节数
MIB_IF_ROW2 ifRow2 = { 0 };
ifRow2.InterfaceIndex = ifRow.dwIndex;
if (GetIfEntry2(&ifRow2) == NO_ERROR)
{
ULONGLONG bytesSent = ifRow2.OutOctets;
ULONGLONG bytesRecv = ifRow2.InOctets;
// 计算带宽使用占比
ULONGLONG speed = ifRow2.TransmitLinkSpeed > ifRow2.ReceiveLinkSpeed ? ifRow2.TransmitLinkSpeed : ifRow2.ReceiveLinkSpeed;
double usage = (double)(bytesSent + bytesRecv) / (double)speed * 100.0;
std::cout << "Interface " << ifRow2.Alias << ": " << usage << "%" << std::endl;
}
}
delete[] pIfTable;
return 0;
}
```
该代码通过遍历接口表,找到所有物理接口,并计算出它们的带宽使用占比。其中,使用GetIfEntry2函数获取接口的发送和接收字节数,使用接口的发送和接收速度计算带宽使用占比。
阅读全文