CFile destFile; FILE* fp=NULL; //是第一次传的话
if((fp=fopen(fname,\
destFile.Open(fname, CFile::modeCreate|CFile::modeWrite | CFile::typeB
inary|CFile::shareDenyNone); else
//如果文件存在,是续传
destFile.Open(fname,CFile::modeWrite | CFile::typeBinary|CFile::shareD enyNone);
//文件指针移到指定位置
destFile.Seek(filerange[index*2],CFile::begin); //发消息给服务器,可以传文件了
sendn(m_socket,(char*)&fileinfo1,100);
CFile myfile; CString temp;
temp.Format(\ 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; }
到这客户端的主要模块和机制已基本介绍完。希望好好体会一下这种多线程断点续传的方法。