0

我正在使用 Qt 中的 qextserialport 类来实现设备之间的串行传输。现在,我需要使用串口在通过 USB 连接的设备之间发送文件。在过去的几周里,我已经将串行端口用于各种功能,但我不知道从哪里开始实现它。我考虑读取数据事件驱动,直到没有更多数据要读取,事先确定文件的大小(字节数)并将其与数据一起发送,这样如果数据丢失就很清楚了。我还有一个计算 CCIITT 16 位校验和的正确函数,因此我也可以使用它进行检查。因此,我的问题是:

有人可以向我发送一个可以帮助解决我的问题的网站的链接,并向我解释通过 Qt 中的 qextserialport 类发送文件和接收文件的最简单有效的方法是什么。任何帮助都会很糟糕!

4

1 回答 1

0

你需要一个协议。一个简单的可能是:

  • 将文件名的长度作为原始二进制数发送,例如网络字节顺序中的 2 个字节(最大名称长度 65535 字节)

  • 发送那么多字节的文件名,用 UTF-8 编码

  • 将文件大小作为原始二进制数发送,例如网络字节顺序中的 4 个字节(最大文件大小 4 gigs)

  • 发送那么多字节的文件内容

您可能想要添加文件日期和校验和等信息。更高级的是将文件拆分为块,因此如果出现传输错误,您不必重新发送所有内容。等等。

此外,研究 Kermit、xmodem、zmodem 等协议,了解它在调制解调器和 BBS 时代是如何完成的。也许使用这样的现有协议而不是创建自己的协议。

注意:虽然您可以使用QDataStream,但它需要可靠的通道,所以它并不像起初看起来那么容易(需要额外的缓冲)。

于 2014-01-24T06:55:38.467 回答