现在已经有很多断点续传、多线程下载的软件了,比如网际快车等等。下面设计的程序是“断点续传、多线程上载”。

 

缘起:客户每天都有大量文件上传服务器。这些文件很多,并且体积挺大,FTP有时候会出一些问题,导致传递失败,要重新上传。

 

基本解决方案:

1:把文件分割成块,每次只是传递一个文件块。

2:一个文件可以起多个发送任务(线程),同时发送。

3:记录文件发送状态,在网络出现问题时(或者客户端意外终止),知道上次发送文件大小和位置指针。再重新链接以后,继续发送。

 

对象和线程

这里面涉及到一个显示窗体form1,有timer可以随时更新发送状态;一个上传类Uploader(对应于一个文件);Task对象(也就是一个文件);FileThunk对象(每一个任务,对应于一个线程);WebService接受文件类。

发送状态需要记录在数据库。测试状态下,数据记录在xml文件。基本格式如下:

      


  <task name="contact.txt" percentage="" totalSeconds="" localFile="" remoteFile="" fileSize="">
   
<thread name="thread1" begin="" end="" lastTime=""></thread>

  
</task>
</tasks>

数据表结构也基本类似这样。

 

核心代码

1form1. 这个主要是显示。主要函数是 添加任务(Task);更新任务状态

 
        }
        }
22 


2:Uploader的核心代码:主要是启动线程。

        }


3:Task类的主要代码:主要是初始化任务,其他诸如和对数据的保存/提取 

        }


4:FileChunk的核心代码:主要是如何上传文件

        }



5:WebService的核心代码

[] data)
    {
        _fileName = AppDomain.CurrentDomain.BaseDirectory + """tmp""" + file;
        
try
        {
            _fs 
= File.OpenWrite(_fileName);
            _fs.Position 
= begin;
            _fs.Write(data, 
0, (int)len);
            _fs.Flush();
            _fs.Close();
            _fs 
= null;
            
return "ok";
        }
        
catch (Exception ex)
        {
            
string s = ex.Message;
            
return "retry";
        }

    }



  小结

技术难度不大;现实实用;上传速度尚可。

  程序运行截图一个
断点续传、多线程上载【转:http://www.cnblogs.com/dlwang2002/archive/2008/09/12/1290017.html】

相关文章: