我在Qt中使用qextserialport类来实现设备之间的串行传输。现在,我需要使用serialport在通过USB连接的设备之间发送文件。我在过去几周里使用了串口来实现各种功能,但我不知道从哪里开始实现这个功能。我想到读取数据事件驱动,直到没有更多的数据要读取,确定文件的大小(字节数),并将其与数据一起发送,以便在数据丢失时清楚。我也有一个正确的函数来计算CCIITT 16位校验和,所以我也可以用它来检查。因此,我的问题是:
有人可以给我发一个链接到一个可以帮助解决我的问题的网站,并向我解释一下通过Qt中的qextserialport类发送文件和接收文件的最简单有效的方法。任何帮助都会很棒!
答案 0 :(得分:0)
你需要一个协议。简单的可能是:
将文件名的长度作为原始二进制数发送,例如以网络字节顺序的2个字节 (最大名称长度65535字节)
发送用UTF-8编码的文件名的多个字节
将文件大小作为原始二进制数发送,例如网络字节顺序为4个字节(最大文件大小为4 gigs)
发送那么多字节的文件内容
您可能希望添加文件日期和校验和等信息。更高级的是将文件拆分为块,因此如果存在传输错误,则不必重新发送所有内容。等
此外,研究协议如Kermit,xmodem,zmodem,看看它是如何在调制解调器和BBS时代完成的。也许使用像这样的现有协议,而不是创建自己的协议。
注意:虽然您可以使用QDataStream
,但它需要可靠的频道,因此它并不像最初看起来那么容易(需要额外的缓冲)。