局域网之间传送大文件的方法
作者:刘华煜 赵 涛
来源:《电脑学习》2008年第03期
摘要:介绍了局域网之间传送大文件的方法。 关键词:局域网 Ftp 断点续传
中图分类号:TP393.1 文献标识码:B 文章编号:1002-2422(2008)03-0030-02
1 无断点续传机制的分块传输方法
假设发送文件方主机为A,接收文件方主机为B,Ftp服务器为C,A要向B传递的大文件为L,B将这个文件在本机上存为D。
(1)A向C上传一个文件F,F的内容是L的第1部分,然后上传同步文件S,内容为1,然后等待S的内容变成2:
(2)B一开始则定时向C发出请求查看S文件的内容,如果有这个文件并且内容为1,则下载文件F,保存为D,然后上传文件S,内容为2,然后等待S的内容为3;
(3)A发现S的内容为2后,上传文件F,F的内容是L的第2部分,然后上传文件S,内容为3,然后等待S的内容变成4;
(4)B发现S的内容为3后,下载文件F,附加到文件D后,然后上传文件S,内容为4,然后再次等待S的内容为5……;
(5)A在上传L的最后一部分后,上传文件S,内容为-1,然后等待S的内容为-2;B发现s的内容为-1后,下载文件F,附加到文件D后,然后上传文件S,内容为-2,然后B主机程序结束;
(6)A发现S的内容为-2后,程序结束。
2 有断点续传机制的分块传输方法
龙源期刊网 http://www.qikan.com.cn
网络是不可靠的,可能因为多种原因导致传输中断。对于大文件来说,重新传输是很浪费资源的一件事情,必须做到断点续传。
若S的值为2a,则B正在等待S(2a+1),而A在上传第a+l部分或上传S(2a+1)时中断了,则A只需重新上传第a+l部分开始执行即可,B则从等待S(2a+1)开始。
若S的值为2a-1,则A正在等待S(2a),而B在下载第B部分或上传S(2a)的时候中断了,那么B只需从重新下载第a部分开始执行即可,A则从等待S(2a)开始。
这样就出现了A如何判断第a+l部分开始于L的哪个字节的问题。同样也有B如何判断第a部分开始于D的哪个字节的问题,因为B可能在下载第a部分的中途断掉了,所以D的文件尾并不一定是第a部分的开始。
解决这个问题的方法是A创建一个文件U,将下一部分的开始字节号写入U中,而B创建一个文件R,将下一部分的开始字节号写入R中。
写入u这一步如果在上传第a部分后上传S(2a-1)前执行,那么在上传S(2a-1)的时候网络断掉了,S的值是2a-2,根据以上的论述,中断后继续运行的时候A应该上传第a部分,而这个时候U中存储的是第a+l部分的开始字节号,那么上传的其实是第a+l部分,这样就出现了错误。所以写入U这步必须在上传S(2a-1)后等待S(2a)前执行。
同理,写入R这一步如果在下载第a部分后上传s(2a)前执行,那么如果在上传S(2a)的时候网络断掉了,S的值是2a-1,根据以上的论述,中断后继续运行的时候B应该下载第a部分,而这个时候R中存储的是第a+l部分的开始字节号,那么第a部分就下载到第a+l部分处了,这样也会出现错误。所以写入R这步也必须在上传S(2a)后等待S(2a+1)前执行。 这样程序一开始就要下载S,看S存在与否,如果存在,还要看s的值是多少,然后决定从哪步开始进行断点续传。
因为s的值已经决定了程序的开始步骤,所以上传方还要负责在S为一2后从c上删除S文件。
3 方法的实现
3.1上传文件方程序流程
龙源期刊网 http://www.qikan.com.cn
(1)打开文件L,获得文件L的长度;
(2)从Ftp服务器下载同步文件S,如果S不存在,则将步骤标识s把p赋值为1,将要上传部分的开始字节数up-size赋值为0,然后转7;
(3)如果S的内容大于O且为偶数2a,则将step赋为2a+l,并打开文件u,得到要上传部分的开始字节数upsize,然后将L的文件指针定位到upsize处,然后转7;
(4)如果S的内容大于0且为奇数2a+1,则将step赋为2a+1,并打开文件U,得到要上传部分的开始字节数up-8ize,然后将L的文件指针定位到upsize处,然后转10, (5)如果S的内容为-1,则转10:
(6)如果S的内容为-2,则删除S后程序结束;
(7)上传指定长度部分(如果剩余字节数不足指定长度,则上传剩余字节数),并将L的文件指针相应的向后移动上传字节数;
(8)如果已经到文件尾,则上传S(-1),否则上传S(step); (9)将upsize自加上上传的字节数并将upsize写入文件U; (10)定时查看S,如果S的内容是step,则转10;
(11)如果已经到文件尾并且s的内容为-2,则删除S后程序结束; (12)step自加2,转7。
3.2下载文件方程序流程 (1)打开文件D:
(2)从Ftp服务器下载同步文件S,如果S不存在,则将步骤标识step赋值为0,将要上传部分的开始字节数downsize赋值为0,然后转7;
(3)如果S的内容大于O且为偶数2a,则将step赋为2a,并打开文件R,得到要上传部分的开始字节数downsize,然后将D的文件指针定位到downsize处,再转7;
(4)如果S的内容大于0且为奇数2a+l,则将step赋为2a,并打开文件R,得到要上传部分的开始字节数down-size,然后将D的文件指针定位到downsize处,然后转8:
龙源期刊网 http://www.qikan.com.cn
(5)如果S的内容为-l,则将step赋值为-1,再转8; (6)如果S的内容为-2,则程序结束;
(7)定时查看S,如果s的内容不是step+l或-l,则转7; (8)下载文件F,并写入文件D:
(9)如果S内容为-1,则上传S(-2)并结束,否则sup自加2,并上传S(step); (10)将downsize自加上下载的字节数并将downsim写入文件R;
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务