WEB开发网
开发学院软件开发VC 点对点多线程断点续传的实现 阅读

点对点多线程断点续传的实现

 2010-01-09 20:31:56 来源:WEB开发网   
核心提示:读文件函数void readfile(SOCKETso,int seek,int len,int fino){//文件名CString myname;myname.Format("%s",nameph[fino]);CFile myFile;//打开文件myFile.Open(myname, CFi

读文件函数

void readfile(SOCKET so,int seek,int len,int fino)
{
  //文件名
  CString myname;
  myname.Format("%s",nameph[fino]);
  CFile myFile;
  //打开文件
  myFile.Open(myname, CFile::modeRead | CFile::typeBinary|CFile::shareDenyNone);
  //传到指定位置 
  myFile.Seek (seek,CFile::begin);
  char m_buf[SIZE];
  int len2;
  int len1;
  len1=len;
  //开始接收,直到发完整个文件
  while(len1>0){
     len2=len>SIZE?SIZE:len;
    myFile.Read(m_buf, len2);
    int aa=sendn(so,m_buf,len2);
  if(aa<0){
    closesocket (so);
     break;
  }
  len1=len1-aa;
  len=len-aa;
  }
   myFile.Close();
}

服务器端最要的功能各技术就是这些,下面介绍客户端。

二、客户端

客户端最重要,也最复杂,它负责线程的管理,进度的记录等工作。

大概流程 如下:

先连接服务器,接着发送命令1(给我文件信息),其中包括文件长度,名字等,然后根 据长度决定分几个线程下载,并初使化下载进程,接着发送命令2(可以给我传文件了),并记录文件进 程。最后,收尾。

这其中有一个十分重要的类,就是cdownload类,定义如下:

class cdownload 
{
public:
  void createthread();//开线程
  DWORD finish1();//完成线程
  int sendlist();//发命令1
  downinfo doinfo;//文件信息 (与服务器定义一样)
  int startask(int n);开始传文件n
  long m_index;
  BOOL good[BLACK];
  int filerange[100];
  CString fname;
   CString fnametwo;
  UINT threadfunc(long index);//下载进程
  int sendrequest (int n);//发文件信息
  cdownload(int thno1);
  virtual ~cdownload();
};

上一页  1 2 3 4 5 6  下一页

Tags:线程 断点 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接