2

我想编写一个从串行端口读取数据包的应用程序。 我在 Stack Overflow 上探讨了不同的问题,看起来使用 boost::asio 是要走的路

但是,我以前从未真正使用过串行端口或 boost::asio,我正在寻找一些关于如何在字节流中“查找”数据包的高级指导。

串行端口发出的每个数据包由 13 个字节组成。不幸的是,数据包不包含任何类型的标头标志,但最后一个字节包含前 12 个字节的校验和。

我假设如果我开始读取串行端口,我得到的第一个字节不一定是数据包的第一个字节。事实上,我读取的第一个字节可能在数据包中间的某个地方。

  • 我打算让主线程定期从串行端口读取一堆数据包并将它们存储到缓冲区中。

  • 第二个线程定期扫描缓冲区并寻找有效的校验和。假设它找到一个有效的校验和,这意味着校验和字节加上前面的 12 个字节形成一个有效的数据包。

这是一种有效的方法吗?

有没有更好的方法来解决这个问题?

4

1 回答 1

3

现实世界的串行协议通过使用引入序列来允许同步(明确识别边界的字节或字节序列)来解决这个问题。你必须阅读直到你看到一个,丢弃之前的东西。我想,只要寻找具有有效校验和的 12+1 就可以了。

于 2013-01-26T21:50:11.130 回答