【问题标题】:Appropriate implementation of packet stream using standards使用标准适当实现数据包流
【发布时间】:2016-11-30 00:55:34
【问题描述】:

我正在为以离散数据包形式进行通信的串行设备编写驱动程序。我还希望用户能够解释来自串行流量转储文件的数据包。我计划在未来编写其他类似的驱动程序。

在查看了可用的库和标准之后,我正在考虑实现 std::codecvt,iostream 使用它来转换为宽字符,以提供一种在字节流和数据包对象流之间进行转换的方法, 并处理 asio 使得串口可以是标准的字节流。

这对我来说似乎是最优雅的方法,它充分利用了标准,但我担心这是对 codecvt 的滥用。阅读 codecvt 的文档显然只是为了转换字符编码。但它似乎适用于更高级别的数据包对象。

使用熟悉的插入和提取运算符来处理更高级别的数据是很诱人的,而这种方法意味着需要最少的样板代码来实现这一点。

这个想法是对 codecvt 的滥用吗?根据您的经验,这里的“正确”或“最佳”解决方案是什么?

【问题讨论】:

    标签: c++ boost-asio


    【解决方案1】:

    我们将 Asio 和 Boost.Spirit 配对,将字节流转换为数据类型,将数据类型转换为字节流。

    我们经常使用它,因此我们将这个概念抽象为一个通用的分包器库,该库可以采用 Qi/Karma 语法和可与async_read_some 一起使用的 Asio 类型。

    我们将它与串行端口、TCP/IP 套接字和自定义 IO 一起使用。

    【讨论】:

      猜你喜欢
      • 2022-11-08
      • 2015-12-11
      • 2011-10-27
      • 2010-12-25
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多