我想编写一个从串行端口读取数据包的应用程序。 我在 Stack Overflow 上探讨了不同的问题,看起来使用 boost::asio 是要走的路。
但是,我以前从未真正使用过串行端口或 boost::asio,我正在寻找一些关于如何在字节流中“查找”数据包的高级指导。
串行端口发出的每个数据包由 13 个字节组成。不幸的是,数据包不包含任何类型的标头标志,但最后一个字节包含前 12 个字节的校验和。
我假设如果我开始读取串行端口,我得到的第一个字节不一定是数据包的第一个字节。事实上,我读取的第一个字节可能在数据包中间的某个地方。
我打算让主线程定期从串行端口读取一堆数据包并将它们存储到缓冲区中。
第二个线程定期扫描缓冲区并寻找有效的校验和。假设它找到一个有效的校验和,这意味着校验和字节加上前面的 12 个字节形成一个有效的数据包。
这是一种有效的方法吗?
有没有更好的方法来解决这个问题?