点对点多线程断点续传的实现
2010-01-09 20:31:56 来源:WEB开发网下面先介绍sendrequest(int n),在开始前,向服务器发获得文件消息命令,以便让客 户端知道有哪些文件可传
int cdownload::sendrequest(int n)
{
//建套接 字
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;
//联接服务器
ret=connect(m_socket,(LPSOCKADDR)&local,sizeof(local));
//有错的话
if(ret<0){
AfxMessageBox("联接错误");
closesocket (m_socket);
return -1;
}
//初使化命令
fileinfo fileinfo1;
fileinfo1.len=n;
fileinfo1.seek=50;
fileinfo1.type=1;
//发送命令
int aa=sendn(m_socket,(char*) &fileinfo1,100);
if(aa<0){
closesocket(m_socket);
return -1;
}
//接收服务器传来的信息
aa=readn(m_socket, (char*)&fileinfo1,100);
if(aa<0){
closesocket(m_socket);
return -1;
}
//关闭
shutdown(m_socket,2);
closesocket(m_socket);
return 1;
}
有了文件消息后我们就可以下载文件 了。在主函数中,用法如下:
//下载第clno个文件,并为它建一个新cdownload类
down[clno]=new cdownload(clno);
//开始下载,并初使化
type=down[clno]- >startask(clno);
//建立各线程
createthread(clno);
赞助商链接