当前位置: 首页 > news >正文

Linux应用框架cpp-tbox之TCP通信(下篇)

cpp-tbox项目链接 https://gitee.com/cpp-master/cpp-tbox

更多精彩内容欢迎关注微信公众号:码农练功房
在这里插入图片描述
往期精彩内容:
Linux应用框架cpp-tbox之弱定义
Linux应用框架cpp-tbox之日志系统设计
Linux应用框架cpp-tbox之事件驱动EventLoop
Linux应用框架cpp-tbox之事件驱动Event
Linux应用框架cpp-tbox之线程池
Linux应用框架cpp-tbox之应用层缓冲
Linux应用框架cpp-tbox之串口通信
Linux应用框架cpp-tbox之TCP通信(上篇)

本篇涉及的内容主要为TCP客户端的实现。

使用示例

TcpClient client(sp_loop);
client.initialize(bind_addr);
client.start();client.setReceiveCallback([&] (Buffer &buff) {}, 0);client.setConnectedCallback([&] {});client.setDisconnectedCallback([&] {});vector<uint8_t> raw_data{0x01, 0x02, 0x03};
client.send(raw_data.data(), raw_data.size());

用户使用起来十分简单,一般设置三个回调函数即可。

整体结构图

下图为TCP Client的软件结构图:

请添加图片描述

其结构和TCP Server类似,不同的是:

  1. TCP Server包含多个TcpConnection,而TCP Client仅包含一个。
  2. TCP Server包含一个TcpAcceptor对象,到TCP Client这里,包含的是TcpConnector。

TcpClient创建并控制TcpConnector对象的生命周期。

TcpConnection对象由TcpConnector创建,但是其生命周期由TcpClient控制。

TcpClient、TcpConnector对象都是可以重复使用的,而TcpConnection对象会随着TCP建立、断开、重连而不断构造、析构。

建立连接

对于客户端,建立连接是主动发起的。和服务端相比,客户端连接建立要复杂一些,难点在于错误处理、重试和重连

而且由于socket fd是一次性的,一旦出错,就无法恢复,只能关闭文件描述符重来。

TcpClient::start()接口被调用后,发起连接,具体连接功能委托给TcpConnector实现,具体在TcpConnector::enterConnectingState中处理:

void TcpConnector::enterConnectingState()
{//! 创建SocketSocketFd new_sock_fd = createSocket(server_addr_.type());if (new_sock_fd.isNull())return;LogDbg("server_addr:%s", server_addr_.toString().c_str());//! 连接 server_addr_ 指定的地址int conn_ret = connect(new_sock_fd, server_addr_

http://www.mrgr.cn/news/50352.html

相关文章:

  • 【Python爬虫系列】_028.Python玩Redis
  • 源码编译llama.cpp for windows on arm
  • 数据结构与算法:图的高级算法
  • IP协议详细介绍
  • Linux概述
  • 坚持每天写代码,真的能提高编程水平吗?
  • 加密算法介绍
  • Qt-系统播放音频(67)
  • UEFI——Device Path
  • 【华三】基本QinQ配置实验
  • 【Linux系统编程】第三十二弹---动态库实战指南:从零构建与高效集成的奥秘
  • yjs机器学习常见算法01——KNN(K—近邻算法)
  • SQL进阶技巧:如何删除第N次连续出现NULL值所存在的行?
  • 深刻,深克
  • 唐寅,风流倜傥的艺术天才
  • 【力扣刷题实战】环形链表
  • 安全光幕的Mutting功能
  • fastify 中的 payload 作用
  • Java8开始ConcurrentHashMap,为什么舍弃分段锁?
  • 在vue项目中如何合理高效的使用生命周期钩子函数