断点续传问题
想做一个断点续传程序,基本原理应该明白了(不知有没有理解错误!)
假如,开始我向对方传c:\a.rm文件,中途断掉,下次我传c:\directory\a.rm,虽然这两个文件名都是a.rm,但内容是完全不同的,
那对方怎么知道是新的文件还是上次未传完的文件,或者说,是续传,还是重新传?
我知道它是有可能请求文件的验算值,但对于大文件来说,生成那个验证值就会花费一定的时间,那效率不是会变低下!
有什么比较高效且准确的方法判断吗?谢谢~~~~~
[解决办法]
打错字,重发。
鉴别是不是同一个文件,基本上要用文件的hash来比较。
你点到点传文件,不是只有一路文件的数据。一般需要两路。一路信令,一路文件数据。
要传文件的时候,发送方就把把文件用MD5算一下,把得到的hash值作为信令的一部分发给对方,对方保存。
然后才开始传文件。
中途发生断点。
后面再发起文件发送的时候,同样的,发送方计算MD5把hash值发给发送方,接收方比较一下已有的hash跟新收到的hash就可以确定是不是要续传还是新文件。接收方这个时候是不需要计算的。
也就是计算文件的hash,只发生一次,在发送方。、
计算一个文件的hash,几百兆的文件也就几秒或者10多秒,这个相对于整个文件传输完成需要的时间是非常小的(所以因为网速有限,大家可能一般不会传太大的文件,当传比较大的文件,上百兆的,大家基本不会期待它很快传完,如果几十分钟能传完就觉得可以了。这个时候传之前计算hash话掉的几秒-10几秒用户应该完全可以接受)。
- 千里孤行