多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。
开发环境:
Win10
Qt5.12.6 + Asio(standalone) + spdlog
支持协议:
UDP + TCP Client + TCP Server
独立的Asio(http://www.think-async.com)只包含了头文件,不依赖Boost,使用时只需定义ASIO_STANDALONE,并将Asio的目录添加到编译系统的include path。Asio现在支持C++11/14/17/20,源码里提供了各个C++版本的examples。
本调试助手界面参考了野人家园的《NetAssist网络调试助手》,这款调试助手功能非常丰富,很难全部实现,只仿了一些主要功能。《NetAssist网络调试助手》有个缺点:当接收数据量较大的时候,界面会卡主,导致消息无法发送成功。本调试助手优化了QPlainTextEdit的数据处理逻辑,支持海量数据的实时渲染,无此问题。
一.默认界面
从界面看出本调试助手具有如下功能:
1. 支持 UDP、TCP Server、TCP Client三种工作模式;
2. 支持ASCII/Hex发送和接收,且发送和接收都支持中文;
3. 支持日志接收模式:接收内容时自动显示时间戳等相关信息;
4. 支持接收数据保存到文件(使用spdlog),且接收数据可设置自动滚屏;
5. 发送内容支持转义字符,例如发送框中包含诸如\r\n等转义符时,会自动解析成对应的ASCII码进行发送;
6. 支持发送数据自动添加递增数据尾,这个在每次发送相同数据时非常有用,可以区分每次发送;
7. 支持从文件导入数据用于发送;
8. 支持任意间隔发送,循环发送;
9. 发送框支持文本选择和复制;
10. 接收框支持文本选择、复制、查找和清空;
11. 状态栏网络错误提示;
12. 支持设置主题。
二.界面主题
默认跟随系统样式和颜色,可以切换到浅色主题或深色主题。
1.浅色主题
2.深色主题
三.查找和过滤
四.收发数据
这里演示一个循环0ms,周期发送数据吧,这种情况下,野人家园的NetAssist收到数据后界面会卡死,而且无法发送数据了。所以这里接收也用本网络调试助手。
可以看到,B在接收数据时,并不会卡顿。A停止发送后,B也停止刷新了,说明了数据数据渲染的实时性,此时内存中并无数据堆积。
其他的特性都比较普通,就不演示了。
原文链接:ASIO网络调试助手之一:简介-CSDN博客