首页 > 编程语言 >一个网络和串口全双工通信的c++库

一个网络和串口全双工通信的c++库

时间:2023-03-11 18:55:05浏览次数:55  
标签:const sp c++ init 串口 全双工 recv ZLToolkits

欢迎指正

概述

  • 该库是https://github.com/ZLMediaKit/ZLToolKithttps://github.com/itas109/CSerialPort的集合
  • 这是一个通信库, 包括网络和串口通信
  • 网络包括: TCP客户端、TCP服务端,UDP单播、UDP组播、UDP广播
  • 提供的接口中,均为全双工通信, 支持收发
  • 需要 c++11及以上版本支持
  • 统一通信接口函数,比如,初始化、发送、关闭、获取接收速率、获取发送速率、获取错误信息等接口、设置接收函数接口。这样,方便不同通信类型网络和串口使用同一套接口对上层应用通信
  • 即将 新增的功能: 当通道初始化失败时,自动重连(实际生产中遇到过)直至成功
  • 该库使用目标: 小团体使用

目录说明

.
│  CMakeLists.txt	 - 顶层CMake脚本
│                      
├─cmake				- ZL toolkits原有
│      
├─example			- 新增, 用于存放自己封装接口的测试文件
│      
├─src				- 原 ZLToolkits原有
│  │  
│  ├─Communcation	- 新增,用于存放自己封装接口文件
│  │      
│  ├─Network		- ZLToolkits原有
│  │      
│  ├─Poller			- ZLToolkits原有
│  │      
│  ├─SerialPort		- 将Cserialport代码拷贝到这里
│  │      
│  ├─Thread			- ZLToolkits原有
|  |
│  ├─Util			- ZLToolkits原有
│  │      
│  └─win32			- ZLToolkits原有
│          
└─tests				- ZLToolkits原有

接口说明

  • 根据使用习惯,通信接口封装分为: 初始化 init、设置接收函数setOnReadFunc、发送send、关闭shutdown、获取错误信息getLastErrorMsg、获取接收速率recvSpeed、获取发送速率sendSpeed。
  • 一个简单的使用范例 (可在 example/recv.cpp中获取具体使用范例), 以串口为例
...
// 1. 创建通信对象
ISP	sp;

// 2. 设置接收数据函数, 如果不需要接收数据,可省略该步骤
{
	RecvData rd;
	auto onread = std::bind(&RecvData::on_recv_data, &rd, std::placeholders::_1, std::placeholders::_2);
	psp->setOnReadFunc(onread);
}

// 3. 初始化参数赋值
SPInit sp_init;
// 设置波特率
sp_init.baud_ = 115200;
// 设置与哪个串口通信
sp_init.name_ = std::string{"COM10"};
// 设置需要接收的数据帧头是哪个, 如果是需要处理原始数据,这里传递空字符串即可。
sp_init.recv_head_ = std::string{ "01 02" };
// 串口需要接收的数据帧长。
sp_init.recv_len_ = 10;

// 5. 初始化串口(应该检查结果,是否初始化成功)
const init_ret  = sp.init(sp_init);

// 6. 发送数据
const int arr_size = 10;
const char arr[arr_size] = {0};
// 检查发送结果,是否发送成功
const int send_ret = sp.send(arr, arr_size);

// 7. 获取接收速率 bytes/s
const int recv_speed = sp.recvSpeed();

// 8. 获取发送速率, bytes/s
const int send_speed = sp.sendSpeed();

// 9. 获取错误信息
const std::string str_error = sp.getLastErrorMsg();

// 10. 关闭串口
sp.shutdown();

更多使用, 参考 /example/recv.cpp

接口封装说明

  • 因为自己统一了通信接口,将代码放在了/src/Communcationw/icommunication.h和icommunication.cpp中
  • 将持续维护该库

标签:const,sp,c++,init,串口,全双工,recv,ZLToolkits
From: https://www.cnblogs.com/pandamohist/p/17206708.html

相关文章

  • 第 1 章 C++编程基础 Basic C++ programming
    1.1如何撰写C++程序_HowtoWriteaC++Program练习1.4,在终端上让用户输入fastname和lastname并打印出来练习1.4#include<iostream>#include<vector>#include......
  • 对C++做爬虫的代码进行简单分析
    有这样一段代码#include<stdio.h>#include<tchar.h>#include<windows.h>#include<urlmon.h>#pragmacomment(lib,"urlmon.lib")intmain(){ TCHARurl[]=TE......
  • C# 调用 c++ DLLL试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B
     网上各种设置目标编译平台为x86都解决不了问题,有可能是DLL依赖的文件的位数有问题1、先查一下被调用的DLL用了那些DLLvs的开发人员工具控制台输入 dumpbin/depe......
  • C++ 标准库中的 vector
    标准库类型vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象,都有一个与之对应的索引,索引用于访问对象。vector是一个类模板,编译器根据模板创建类或者函......
  • C++ | 計算兩點的角度
    #include<math.h>#include<iostream>#include<stdio.h>#definePI3.141592654#defineEARTH_RADIUS6378.137//地球近似半徑u......
  • C++协程
    参考C++那些事之C++20协程#include<iostream>#include<coroutine>structgenerator{structpromise_type{intcurrent_value;std::suspend......
  • C/C++小学生测验[2023-03-10]
    C/C++小学生测验[2023-03-10]题目2:小学生测验面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。功能要求:(1)进入测试之前先输入用户名、密码登录,......
  • C++的常量
    在C++中,常量可以分为以下几种类型:1、整型常量(IntegerConstants):整数常量,可以是十进制、八进制或十六进制,例如42、052、0x2A等。整型常量可以使用后缀来指定类型。u......
  • 如何通过C++ 将数据写入 Excel 工作表
    直观的界面、出色的计算功能和图表工具,使Excel成为最流行的个人计算机数据处理软件。在独立的数据包含的信息量太少,而过多的数据又难以理清头绪时,制作成表格是数据管理的最......
  • C++ 数组 指针小记
    voidfun(int*aa){return;}int*a=newint[16];memset(a,0,16);fun(a);voidfun(int*aa){return;}inta[16]={0};fun(a);  总之,两......