通过qextserialport发送文件

时间:2014-01-24 05:45:13

标签: c++ qt qextserialport

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

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

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