设计一个简单的文件传输协议

1.文件头设计

TypeSeqLengthChecksum
2 Byte2 Bytes2 Bytes2 Bytes

2.包设计

a.文件信息包

TypeSeqLengthChecksumProtocol VersionFileName LengthFileSizeFileName
TYPE_FILE_INFO00 00包括文件头的总长度2 Bytes协议版本 1 byte1 Byte4 BytesN Bytes

b.数据包

TypeSeqLengthChecksumPayLoad
TYPE_DATANN MM包括文件头的总长度4 BytesXX Byte

c. 确认包

TypeSeqLengthChecksum
TYPE_ACKNN MM 收到的前面包序号包括文件头的总长度4 Bytes

d.结束包

 SeqLengthChecksum
TYPE_ENDNN MM包括文件头的总长度4 Bytes

为了验证上述协议,编写一个 C 代码,在 VS2019 中编译成功,使用串口通讯。理论上串口是流通讯,并不是基于包的通讯。但是实际上我们使用的USB 转串口模块之类的,存在一个缓冲区的问题,特别是对于速度很高的情况(例如,6Mbps),收下来的数据都是先缓存在设备内部的,如果取走的速度比进入的速度快就会有数据丢失的问题。这种情况下,通讯包使用缓冲区一样大小的尺寸效率最高。

用于测试的C代码:

编译后的 exe

使用方法:

发送:

FileTransferProtocolTest.exe -s com17 FileTransferProtocolTest.pdb

接收:

FileTransferProtocolTest.exe -r com16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注