关于取消接收数据包#cancelReceivePacket()

来源:9-16 消息分片设计与实现-接收调度-2

none_nkn

2020-06-30

如下图,当接收到取消标记帧时,会取消该帧对应包的接收。在cancelReceivePacket()方法中取消接收逻辑当作一种“异常完成接收”来处理,即provider.completedPacket(packet, false)。最终会走Packet的close–>closeStream–>buildEntity。想问:如果取消的是文件类型的包,该文件包已经接收了部分数据,产生了临时的接收文件Xxx.tmp,此时取消接收该临时文件会被同时删除还是留存在磁盘中?取消发送逻辑完成了但没有这方面的测试。图片描述

写回答

1回答

Qiujuer

2020-07-14

会留存在本地文件里,默认不会删除。但是会将其抛给外部,当外部收到该消息时可以做容错处理:

  1. 获取已接收的长度

  2. 使用消息机制与对方通讯,然后得到后续发送的长度

  3. 接收后续的数据,并将其嫁接到已接收的文件上

这其实就是断点续传的原理。

0
0

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2316 学习 · 476 问题

查看课程