- 博客(24)
- 资源 (10)
- 收藏
- 关注

原创 开源基于asio的网络通信框架asio2,支持TCP,UDP,HTTP,WEBSOCKET,RPC,ICMP,SSL,串口,跨平台,支持可靠UDP,支持TCP自动拆包等
开源基于asio的网络通信框架asio2,支持TCP,UDP,HTTP,RPC,SSL,跨平台,支持可靠UDP,支持TCP自动拆包,TCP数据报模式等
2022-06-23 16:41:54
2232
原创 程序模块化设计时通过配置模块间的依赖关系来控制各个模块启动的先后顺序
接上一篇文章“分享一个C++下使用简单的反射实现的程序模块化的思路”,现在要解决的问题是,如果程序的各个模块在启动时要有先后顺序,那我们该怎么办呢?比如我们在写网络应用程序时:首先我们要接收数据,而接收数据的途径可能有多种,如通过tcp接收,或通过udp接收,或通过串口接收,且接收的数据格式也可能有多种,如厂家A的私有协议格式,或厂家B的私有协议格式;此时,我们可以针对这些各种不同的情况分别写一个模块,每个模块负责处理不同的数据,然后所有的这些模块将数据重新组织成我们自己统一的一种格式,再把统一格式的这个数
2024-09-25 17:49:52
617
原创 分享一个C++下使用简单的反射实现的程序模块化的思路
首先说一个基本问题,项目大了以后,一定要做模块化处理,每个模块处理各自的事情,各个模块之间尽量不要有太多的耦合,就是说模块A尽量不要依赖模块B,模块B也不要依赖模块A。千万不要把所有代码写在一起搞成一锅粥,人脑是有限的,拆分成各个小块,一是逻辑简单不容易出问题,二是即使出了问题排查起来也更容易。由于我没有想到一个比较好的,对新手也特别容易理解的例子,所以这里就直接按照我能想到的举例吧。假如我们有个需求是这样的:有一个tcp server,要接收客户端发过来的请求,然后根据不同的请求,做出不同的处理后再回复客
2024-01-23 11:20:01
1152
1
原创 分享一个asio下使用channel来实现无需队列的安全的连续async_write的方法
co_composed是用来解决,自己封装的异步函数中,无法直接使用c++20的协程的问题的。// 在这里使用asio通过宏模拟的协程,这种方式的协程使用起来缚手缚脚的// 很不灵活// 注意:这里无法使用 co_await asio::async_write(sock, "abc");// ...end:// complete 会调用回调函数,这里回调函数有一个参数即asio::error_code。
2024-01-22 15:53:35
959
1
原创 在c++ 20下使用微软的proxy库替代传统的virtual动态多态
上面同样的需求,换成proxy库来实现是这样的:可以看到,换成proxy库之后,不再有virtual虚函数,而且是非侵入式的,我觉得这种方式非常棒,很优雅。至于性能测试,我没有去做。详情见这个开源仓库地址:https://github.com/microsoft/proxy
2023-08-24 17:37:10
3669
1
原创 如何在c++ format中实现格式化串和内容字段成对出现的功能
当要格式化的字段非常多时,格式化串中的{}也会非常多,如果{}中需要带修饰,则修饰的位置和字段的位置必须要正确匹配,下面的示例只包含10个字段,实际项目中的字段可能会达到50个以上,这就导致{}和字段要正确匹配这个工作靠人肉配对时会非常痛苦,如果字段还会经常增删,那问题就更严重;此时格式化串{}和字段是成对出现的,无论有多少字段,无论是否经常增删,写代码时都会非常轻松
2023-08-04 11:19:11
363
1
原创 关于asio2在各个操作系统平台下编译时的openssl等链接库的说明
关于asio2在各个操作系统平台下编译时的openssl等链接库的说明,qt .pro 链接,clion, qt creator,vc, msvc, gcc, clang, ndk, mingw, 安卓,ios,linux,macos
2023-04-06 15:30:05
697
原创 关于asio2项目example目录中的几个tcp示例的说明
关于asio2项目example目录中的几个tcp示例的说明,这几个示例是演示怎么做tcp拆包的,按字符\n进行拆包,按字符串\r\n进行拆包,此时数据边界就是单个字符或字符串,自定义协议的拆包,websocket模式拆包.
2022-11-04 16:08:33
1155
原创 使用asio2开发一个简易的http server
大约200行代码开发一个简易的静态的http server,同时支持http和https,asio,asio2,c++,11,17
2022-11-03 15:52:06
1148
原创 asio做tcp的自动拆包时,asio的match condition如何使用的详细说明
tcp 自动 封包 拆包 如何使用 教程 asio match condition role asio2
2022-11-03 15:21:50
1128
原创 基于c++和asio的网络编程框架asio2教程使用篇:使用rpc模块编写rpc server和rpc client
基于c++和asio的网络编程框架asio2教程使用篇:使用rpc模块编写rpc server和rpc client
2022-06-23 19:52:01
1039
原创 基于c++和asio的网络编程框架asio2教程基础篇:4、使用tcp客户端发送数据时,如何同步获取服务端返回结果
基于c++和asio的网络编程框架asio2教程基础篇:4、使用tcp客户端发送数据时,如何同步获取服务端返回结果 问题描述最基础的使用示例服务端代码客户端代码深入功能1:使用自定义类型的返回数据深入功能2:使用自定义类型的唯一id深入功能3:链式调用深入功能4:服务端和客户端互相调用深入功能5:发送数据和接收数据使用不同的解析函数深入功能6:两次发送的数据的id相同有问题吗?问题描述asio2::tcp_client client;client.bind_recv([&am.........
2020-12-23 16:24:59
1476
2
原创 关于 UE4 (虚幻引擎4)使用VS编译时输出窗口出现乱码的解决办法
关于 UE4《虚幻引擎4》使用VS编译时输出窗口出现乱码的解决办法1:2:3:总结:首先说说VS中如何启用UTF-8编码(但仅在VS中启用UTF-8编码并不能解决UE4的编译输出乱码问题,请往后看):1:如果你的源文件中只有英文,没有汉字,那你这个文件本身实际上就是UTF-8格式的,什么都不用做。如果你的源文件中有汉字,那这个文件通常就是GBK格式的,在VS中打开你这个文件,再点击菜单“文件 - xxx.cpp另存为 - 点击保存按钮右侧的下拉箭头 - 编码保存 - 选择Unicode(UTF
2020-10-10 16:59:18
3883
1
原创 基于c++和asio的网络编程框架asio2教程基础篇:3、各个回调函数的触发线程以及多线程总结
基于c++和asio的网络编程框架asio2教程基础篇:3、各个回调函数的触发线程以及多线程总结服务端:tcp_server:udp_server:客户端项目地址:关于asio的多线程的知识点感觉挺多的,需要对“服务端,客户端,tcp,udp”分别来总结。而且了解各个函数分别在哪个线程中执行的,对于多线程编程以及和做具体业务时变量要不要用锁来保护,非常重要。asio2是“one io_context per cpu”的多线程模式。这个概念主要是asio本身的概念,不了解的可以搜索一下,资料还是挺多的
2020-09-29 15:51:42
1761
原创 基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程
基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程以tcp举例:tcp服务端流程:tcp客户端流程:所有回调函数都必须要写吗?项目地址:以tcp举例:tcp服务端流程:#include <asio2/asio2.hpp>int main(){ std::string_view host = "0.0.0.0"; std::string_view port = "8028"; asio2::tcp_server server; s
2020-09-28 16:06:38
2110
原创 基于c++和asio的网络编程框架asio2教程基础篇:1、基本概念和使用说明
基于c++和asio的网络编程框架asio2教程基础篇:1、基本概念和使用说明1、asio2如何使用?2、asio2是什么?3、为什么不直接使用asio?为什么要做asio2?4、直接使用asio和使用asio2有什么区别?5、asio2有什么优点?6、asio2有什么缺点?7、asio2的实现思路项目地址:由于asio2没有写技术文档,因此打算写几篇文章介绍一下如何使用它,主要是针对新手。1、asio2如何使用?asio2这个框架的使用很简单,以VS2017举例:在VS2017的项目上点右键 -
2020-09-28 15:30:01
8791
6
原创 关于 UE4 (虚幻引擎4) 4.25.1版本提示“无法定位程序输入点 DXGIGetDebugInterface1 于动态链接库dxgi.dll上”的错误的解决办法
关于 UE4 (虚幻引擎4) 4.25.1版本提示“无法定位程序输入点 DXGIGetDebugInterface1 于动态链接库dxgi.dll上”的错误的解决办法:1、原因:使用关键词DXGIGetDebugInterface1进行搜索,可以找到微软官方的API说明,https://docs.microsoft.com/zh-tw/windows/win32/api/dxgi1_3/nf-dxgi1_3-dxgigetdebuginterface1?redirectedfrom=MSDN 通过该..
2020-06-30 14:35:36
10809
3
原创 一个简单好用的操作mysql的c++类,在mysql c api的基础上封装的,没有使用官方的c++ connector
目前 mysql 官方的 c++ connector 还没有针对vs2017编译的二进制包,在mysql官方网站上下载的release二进制包在vs2017下可以用,但是下载的debug包在vs2017下运行时却提示找不到vcruntime140_1D.dll 而下载c++ connector源码进行编译,它还要依赖boost,而且编译过程中还出现一些找不到sys/types.h头文件的之类错误,...
2020-03-16 16:32:54
436
原创 c++ 11 std::thread 线程 获取线程ID的整数值
std::ostringstream oss;oss << std::this_thread::get_id();std::string stid = oss.str();unsigned long long tid = std::stoull(stid);
2018-05-31 17:48:52
33978
14
转载 对TCP协议通信过程中的TCP_NODELAY选项的通俗解释
30年前,阳澄湖的蟹农老王,每抓一只大闸蟹,就派一辆三轮车送到上海,1小时后再带着卖蟹的钱回来,老王想,这样好处是回款快(延迟小)。老张、老李、老赵等等蟹农也发现了这个好处,于是大家都开始这种办法。但是,30年前的乡间小路,很快被一辆辆的三轮车所堵塞,结果三天三夜也没有到达上海,老王的如意算盘泡汤了。痛定思痛,老王觉得,没有必要一个螃蟹一辆三轮车,可以将上午的所有螃蟹装在一辆大卡车上,
2018-01-15 11:54:39
1050
转载 Reactor模式,或者叫反应器模式
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些。通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽。 并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量。 先用比较直观的方式来介绍一下这种方式的优点,通过和常用的
2017-11-10 21:26:03
442
原创 关于VS2017编译linux程序时,错误提示信息太简单,看不出错误原因的解决办法
关于VS2017编译linux程序时,错误提示信息太简单,看不出错误原因的解决办法
2017-07-12 11:22:41
10196
4
GFSDK_Aftermath_Lib.x64.rar
2020-06-30
PNG透明图片重叠父窗口残留刷新问题
2014-12-26
MFC的标题栏自绘源码
2012-11-30
一个扩展的CComboBox 下拉框 自绘 美化
2012-09-28
CTabCtrl美化
2012-09-27
VC/MFC SQL 2000 自己写的分页控件
2012-09-03
自己写的美化菜单的CMenuEx类
2012-04-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人