欢迎指正
概述
- 该库是https://github.com/ZLMediaKit/ZLToolKit和https://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中
- 将持续维护该库