C#技术分享-基于Socket的断点续传功能
最近开发了一个异地灾备传输工具,每周从广州服务器传输 5G的数据库备份文件 到北京服务器。
第一个版本的传输工具开发得很简单,两个window服务,一个负责发送,另一个负责接收,利用 socket 建立 tcp 连接进行数据传输,在测试服务器上传输10G大小的文件没有问题。
但部署到生产环境之后,每次传输了3G左右的数据就中断了,经分析是由于网络不稳定造成的,所以需要对传输工具添加断点续传功能,当传输意外中断时,可以自动连接,并完成上一次未完成的传输。
断点续传的原理很简单,就是分割需要传输的文件,每次传输一小块数据,并附带数据的位置和大小信息,服务器成功接收数据之后,则继续下一块数据的传输,否则重复上一块数据的传输,直到成功为止。