# TransmitDataByUDP **Repository Path**: xyz_w/TransmitDataByUDP ## Basic Information - **Project Name**: TransmitDataByUDP - **Description**: 基于UDP实现文件的可靠传输 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-19 - **Last Updated**: 2024-04-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TransmitDataByUDP #### 介绍 基于UDP实现文件数据的可靠传输,核心包含三个部分的内容 1. 分块传输 2. 累计确认 3. 超时重传 #### 帧格式 为了实现基于UDP的可靠文件传输,设计了以下三种报文段类型。所有的报文段中,都有报文段格式版本号和报文类型两个字段。设置报文段格式版本号是设计数据传输报文段格式时的常见做法,方便之后对报文段格式进行升级拓展;报文类型用来识别该报文段的类型,从而知道该如何解析收到的数据,以及应该作出何种响应。版本号和报文类型字段都是一个字节长度。 为了实现对传送报文段的确认,对发送方的报文段都设置了一个序号字段,序号字段占用4个字节,序号代表的该报文段中的第一个字节数据是已发送的所有数据中的第几个字节,序号最小值为0。接收方只会发送确认报文,确认报文没有序号,有一个确认号字段,确认号字段占用4个字节。 (1)文件基本信息报文段:报文类型=1,作为数据传输的第一个报文段,通知接收方待发送文件的基本信息,接收方收到后需要立刻发送确认;发送方只有在收到了对文件基本信息报文段的确认后,才会开始文件数据块的传输。报文段的具体格式如下图所示。其中,文件信息数据使用的json格式,接收方收到后,解析出json数据即可得到对应的文件基本信息。 ![文件基本信息报文段](https://foruda.gitee.com/images/1713492634304603667/362d26ab_8755841.png "屏幕截图") (2)数据块报文段:报文类型=2,用来传送具体的文件信息,发送方会将文件划分为数据块,通过数据报文段进行发送。数据块报文段的格式如下图所示。 ![数据块报文段](https://foruda.gitee.com/images/1713492648777631987/742dc312_8755841.png "屏幕截图") (3)累积确认报文段:报文类型=3,用来对收到的“文件基本信息报文段”或“数据块报文段”进行累积确认,通知接收方,报文段编号小于等于该确认号的报文段都已经全部收到。 ![累计确认报文段](https://foruda.gitee.com/images/1713492661802419253/f01398bf_8755841.png "屏幕截图")