Windows Mobile上实现断点续传。

最近看到有人在网上讲论WM上的下载工具,就提供个断点传的思路,供大家交流。

断点续传就是在上一次下载 时断开的位置开始继续下载。在HTTP协议中,可以在请求报文头中加入Range段,来表示客户机希望从何处继续下载。

代码如下,在WM6环境下测试通过。

 

static void Main(string[] args)
  {

         string StrFileName="c://aa.zip"; //根据实际情况设置
      string StrUrl="http://www.xxxx.cn/xxxxx.zip"; //根据实际情况设置

     //打开上次下载的文件或新建文件
     long lStartPos =0;
        System.IO.FileStream fs;
        if (System.IO.File.Exists(StrFileName))
        {
              fs= System.IO.File.OpenWrite(StrFileName);
              lStartPos=fs.Length;
              fs.Seek(lStartPos,System.IO.SeekOrigin.Current); //移动文件流中的当前指针
      }
        else
        {
              fs = new System.IO.FileStream(StrFileName,System.IO.FileMode.Create);
              lStartPos =0;
       }

        //打开网络连接
     try
       {
              System.Net.HttpWebRequest request =(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(StrUrl);
              if ( lStartPos>0)
              request.AddRange((int)lStartPos); //设置Range值

         //向服务器请求,获得服务器回应数据流
         System.IO.Stream ns= request.GetResponse().GetResponseStream();

             byte[] nbytes = new byte[512];
             int nReadSize=0;
             nReadSize=ns.Read(nbytes,0,512);
             while( nReadSize >0)
            {
                  fs.Write(nbytes,0,nReadSize);
                  nReadSize=ns.Read(nbytes,0,512);
            }
            fs.Close();
            ns.Close();
            Console.WriteLine("下载完成");
       }
       catch(Exception ex)
      {
             fs.Close();
             Console.WriteLine("下载过程中出现错误:"+ex.ToString());
      }
  }

posted @ 2010-01-06 19:42  javawebsoa  Views(214)  Comments(0Edit  收藏  举报