讲师中心 微信公众号
AI工具推荐 视频效率加速

C++如何获取系统的网络收发实时速率(Mbps)

星瑶大大_8994

星瑶大大_8994

发布时间:2026-06-13 23:18:37

|

295人浏览过

|

来源于php中文网

原创

Linux下用/proc/net/dev解析网卡收发字节数实时速率本质是单位时间内的字节增量,最轻量方式是读取该文件,跳过前两行表头,提取每行冒号后第2列(rx_bytes)和第10列(tx_bytes),用uint64_t存储,两次采样求差除以时间间隔并换算为Mbps。

c++如何获取系统的网络收发实时速率(mbps)

Linux下用/proc/net/dev解析网卡收发字节数

实时速率本质是单位时间内的字节增量,Linux最轻量的方式就是读取/proc/net/dev——它不依赖额外库,无权限要求,且更新频率与内核统计一致(通常每秒数次)。文件每行代表一个网卡,关键字段是第2列(接收字节数)和第10列(发送字节数),注意跳过前两行表头和空行。

实操建议:

立即学习“C++免费学习笔记(深入)”;

  • 用std::ifstream按行读取,对每行std::istringstream分割,检查接口名是否匹配目标网卡(如"eth0"或"enp0s3"),避免误读"lo"环回口
  • 两次采样间隔建议≥500ms,太短会导致除零或噪声过大;间隔1s最稳妥
  • 字节数是无符号64位整数,务必用uint64_t存储,否则32位溢出(满速1Gbps约每4秒就超2³²)
  • 计算Mbps时,先算差值再除以时间(秒),最后×8(字节→比特)÷1'000'000(bps→Mbps),别用×8/1e6——浮点精度损失小

Windows下用GetIfEntry2获取网卡实时流量

Windows没有类似/proc的伪文件系统,必须调用IP Helper API。GetIfEntry2是推荐方式,它返回MIB_IF_ROW2结构,其中ReceivedBytes和TransmittedBytes字段即为累计字节数,精度同Linux内核统计。

实操建议:

立即学习“C++免费学习笔记(深入)”;

  • 需链接iphlpapi.lib,头文件包含#include <iphlpapi.h></iphlpapi.h>
  • 先用GetIfTable2枚举所有接口,遍历InterfaceLuid匹配目标网卡名(Alias字段),再调用GetIfEntry2——不能直接靠索引,因接口索引可能动态变化
  • 注意GetIfEntry2返回的字节数是自系统启动以来的累计值,需两次调用取差;若第一次调用后接口被禁用,第二次可能失败,要检查返回值ERROR_NOT_FOUND
  • Windows 7需用GetIfEntry(返回MIB_IFROW),字段名不同(dwInOctets/dwOutOctets),且只支持IPv4接口

跨平台封装时如何避免采样抖动和溢出

无论Linux还是Windows,原始字节数都是单调递增的,但用户看到的“实时速率”曲线容易抖动,主因是采样间隔与内核统计周期不同步,以及网络突发流量。直接显示单次差值会剧烈跳变,必须平滑处理。

C++ Code Review Master
C++ Code Review Master

组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。

下载

实操建议:

立即学习“C++免费学习笔记(深入)”;

  • 维护一个固定长度的环形缓冲区(如5个元素),每次存入新速率值,显示时取平均——比简单低通滤波更可控
  • 检测字节计数器回绕:若本次值 阈值(如1TB),视为回绕,按本次值 + (2^64 - 上次值)修正(仅Linux需考虑,Windowsuint64_t字段实际不会回绕到0)
  • 速率单位统一用Mbps(兆比特每秒),不是MBps(兆字节每秒),后者数值是前者的8倍,混淆会导致结果错8倍
  • 不要用sleep()硬等间隔:Linux用clock_gettime(CLOCK_MONOTONIC, ...),Windows用QueryPerformanceCounter做高精度等待,避免系统负载高时采样偏移

常见错误:误把瞬时速率当带宽,或混淆接口名

很多代码直接输出“当前速率”,但用户真正需要的是“该网卡此刻承载的流量强度”。这导致两个典型问题:一是把TCP重传、ACK包等冗余流量全计入,二是把虚拟网卡(Docker bridge、VMnet)当物理口。

实操建议:

立即学习“C++免费学习笔记(深入)”;

  • Linux下用ip link show确认物理网卡:看link/ether存在且state UP,排除docker0、veth*、br-等
  • Windows下优先选InterfaceDescription含"Intel", "Realtek", "Broadcom"的接口,过滤掉"Hyper-V", "VirtualBox", "TAP-Windows"
  • 速率值超过标称带宽(如千兆口显示1250 Mbps)不一定是错的——TCP/IP栈开销、巨型帧、驱动统计口径差异都可能导致短暂超限,重点看持续趋势而非单点峰值
  • 若程序启动后首次读数为0,别立即报错,应等待2次采样后再计算——内核可能尚未刷新初始值

真正的难点不在读数据,而在确定“哪个接口、什么时刻、怎么解释”。网卡驱动上报的字节数本身没问题,但容器、虚拟化、多路径聚合会让接口归属变得模糊;而用户要的“实时”,其实是“可感知的最近1秒趋势”,不是数学意义上的瞬时导数。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
c++和c语言的区别有哪些
c++和c语言的区别有哪些

c++和c语言的区别:1、面向对象编程(OOP)支持不同;2、新增特性不同;3、标准库不同;4、编译方式不同;5、命名空间不同等等。想了解更多c++的相关内容,可以阅读本专题下面的文章。

2228

2024.03.14

c++和python学习顺序推荐
c++和python学习顺序推荐

一般建议先学习C++,再学习Python,因为这样可以逐步从较为底层的编程语言向更高级的语言过渡。想了解更多python的相关内容,可以阅读本专题下面的文章。

999

2024.03.14

python和c++学习性价比分析
python和c++学习性价比分析

Python易于学习,广泛应用于Web开发、数据科学和人工智能等领域,但性能较低。C语言性能高,适用于对性能要求较高的场景,如游戏开发和系统编程,但学习曲线陡峭,错误处理复杂。想了解更多python的相关内容,可以阅读本专题下面的文章。

407

2024.03.14

c语言和c++一样吗
c语言和c++一样吗

c语言和c++是两种不同的编程语言,虽然有相似之处,但存在显著差异。c语言专注于过程式编程和系统级开发,以简洁、高效著称。c++作为c语言的超集,引入了面向对象编程,增强了代码组织和管理能力,但学习曲线也更陡峭。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

307

2024.03.14

c语言和c++先学哪个好
c语言和c++先学哪个好

初学者选择学习c语言还是c++语言,需要根据个人学习目标、背景以及编程兴趣和预期应用方向来决定。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

386

2024.03.14

c语言和c++的区别和联系
c语言和c++的区别和联系

c语言和c++是计算机科学领域应用广泛的编程语言。虽然它们有着相似的基础,但它们在语言类型、语法功能和内存管理方面存在着显著差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

580

2024.03.14

c++软件中文更改教程
c++软件中文更改教程

对于 ide,可通过打开设置,找到语言设置,选择中文,并保存更改。对于非 ide 应用程序,可查找设置或选项,选择语言设置,更改为中文,并保存更改。想了解更多c++的相关内容,可以阅读本专题下面的文章。

1389

2024.03.21

python和java和c++学习性价比分析
python和java和c++学习性价比分析

Python以其易学性、丰富的库和活跃的社区而著称,适合数据科学、人工智能和Web开发。Java以其跨平台性、企业级应用开发和Android应用开发而闻名。C++以其底层控制能力、高效性能和游戏开发而著称。选择哪种语言取决于个人兴趣、职业方向和特定需求。想了解更多python和java和c++的相关内容,可以阅读本专题下面的文章。

1197

2024.03.22

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

0

2026.10.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 2 Essentials 免费课程
Conan 2 Essentials 免费课程

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 高级依赖模型介绍
Conan 2 高级依赖模型介绍

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn