
整理此日志. 我希望将来会有时间实现自定义UDP协议. 在许多情况下,我需要UDP的某些功能,并且希望UDP在可接受范围内尽可能稳定. 如果可以实现一个相对通用的类库来实现这一目标,那么需求将大大简化. (重复轮子)
以下是确保UDP传输稳定性的常用方法. 您可以根据需要选择实施部分. 所有实现都等同于在应用程序层再次重新实现TCP.
1,超时重传
2. 有序接受
3. 答案确认

4. 滑动窗流控制
(1)发送机制
首先设计最重要的可靠性. 在将报头添加到UDP之前,我们首先定义一个8字节的协议报头,它是2字节的数据包标识符udp传输图片,2字节的传输序列号,2字节的文件指针位置和2字节的数据关于大小的信息数据包中的数据. 数据包标志指示该数据包是文件数据包,确认包或其他控制包. 发送序列号用于指示数据包的序列信息. 指针定位字节数据用于指示数据包中数据在文件中的何处填充. ,最终大小信息还用于读取和写入文件数据.
发送的一般过程:
我在这里考虑: 继承QUdpSocket并重新实现写接口. 在这两种情况下,在简单的情况下,请尝试让接收者仅将错误消息发送回发送者一次,而无需重新传输. 在复杂情况下,每个分包合同都要求接收方返回收货确认书,如果未收到,则重新发送

int writeMessage(MessageType类型,QString数据)
{
head =类型+ sendNumber + packgeNumber + dataSize
// type指示是否发送数据类型文件或信息
// sendNumber用于将数据分成几个数据包

// packgeNumber当前是软件包的数量
// dataSize信息大小
写头+数据
}
(2)接收机制

1. 在简单的情况下:
在接收到所有数据包和结束包之后,接收端以错误的包头顺序重新排列它们. 接收过程只需要确保序列号从小到大,否则会发生错误.
2. 在高可靠性下:
文件信息包被接收端接受后,使用确认机制确定是否接受文件,并将决定反馈给发送端. 此时,如果发件人收到“确定接受”的结果,它将过去发送该文件的所有数据集.
在这里,我们不像最传统的可靠传输协议TCP协议. 对于每条消息,我们必须在处理下一条消息之前确认接受. 当接受这组消息时,接收端将遵守无序重排机制. 接收过程只需要确保序列号从小到大udp传输图片,否则会引起错误,并向发送端回复错误的报文序列号.
发送端会延迟发送所有消息,然后发送结束消息. 延迟时间是为了减少结束消息早于数据消息被接受的情况. 当然,即使发生这种情况,也不会破坏可靠性. 但是,结束消息之后的数据消息将被视为丢失的数据包并重新发送,从而降低了效率. 接收到结束消息后,接收端将初始文件信息包的信息与序列号进行比较,并将没有序列号的消息的信息发送回发送端,请求重发. 发送端收到信息后,将重新发送丢失的数据包. 在接收端收到的消息与信息匹配之前,接收端可以发回“已接受”消息. 这样,发送端和接收端将执行下一个文件传输.
将来会在实际实现时对特定的自动重传机制,请求重传机制和确认机制进行补充.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-244161-1.html
平时手机电量都能用一天
中国是一个爱好和平的国家
一是日本经过明治维新全民造舰的浪潮
美国没有预料到的是