| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
VC++实现点对点(P2P)多线程断点续传
作者:佚名    文章来源:网络网络    点击数:    更新时间:2006-12-20
 


下面介绍下载进程函数,最最核心的东西了 
UINT cdownload::threadfunc(long index)
{
 //初使化联接
 sockaddr_in local;
 SOCKET m_socket;

 int rc=0;
 
 local.sin_family=AF_INET;
 local.sin_port=htons(1028);
 local.sin_addr.S_un.S_addr=inet_addr(ip);
 m_socket=socket(AF_INET,SOCK_STREAM,0);

 int ret;
 //读入缓存
 char* m_buf=new char[SIZE];
 int re,len2;
 fileinfo fileinfo1;
 //联接
 ret=connect(m_socket,(LPSOCKADDR)&local,sizeof(local));
 //读入各进程的下载信息
 fileinfo1.len=filerange[index*2+1];
 fileinfo1.seek=filerange[index*2];
 fileinfo1.type=2;
 fileinfo1.fileno=doinfo.threadno;
 
 re=fileinfo1.len;
 
 //打开文件 
 CFile destFile;
 FILE* fp=NULL;
 //是第一次传的话
 if((fp=fopen(fname,"r"))==NULL)
  destFile.Open(fname, CFile::modeCreate|CFile::modeWrite | CFile::typeBinary|CFile::shareDenyNone);
 else
  //如果文件存在,是续传
  destFile.Open(fname,CFile::modeWrite | CFile::typeBinary|CFile::shareDenyNone);
 //文件指针移到指定位置
 destFile.Seek(filerange[index*2],CFile::begin);
 //发消息给服务器,可以传文件了
 sendn(m_socket,(char*)&fileinfo1,100);

 CFile myfile;
 CString temp;
 temp.Format(".down%d",index);
 m_temp=fname+temp;

  //当各段长度还不为0时
 while(re>0){
  len2=re>SIZE?SIZE:re;
 
  //读各段内容
  int len1=readn(m_socket,m_buf,len2);
  //有错的话
  if(len1<0){
   closesocket(m_socket);
   break;
  }
 
 //写入文件
 destFile.Write(m_buf, len1); 

 //更改记录进度信息

 filerange[index*2+1]-=len1;
 filerange[index*2]+=len1;
 //移动记录文件指针到头
 myfile.Seek(0,CFile::begin);
 //写入记录进度
 myfile.Write(&filerange[index*2],sizeof(int));
 myfile.Write(&filerange[index*2+1],sizeof(int));

 //减去这次读的长度
 re=re-len1;

 //加文件长度
 doinfo.totle=doinfo.totle+len1;
 };
 
 //这块下载完成,收尾
 
 myfile.Close();
 destFile.Close();
 delete [] m_buf;
 shutdown(m_socket,2);
 
 
 if(re<=0) good[index]=TRUE;
 return 1;
}
到这客户端的主要模块和机制已基本介绍完。希望好好体会一下这种多线程断点续传的方法。 
作者信息:
姓名:赵明
email: papaya_zm@sina.com 或 zmpapaya@hotmail.com
主页: http://h2osky.126.com

上一页  [1] [2] [3] 


相关文章