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

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

 2010-01-09 20:31:56 来源:WEB开发网   
核心提示:接着我们来看用户线程:先看文件消息类定义:struct fileinfo{int fileno;//文件号 int type;//客户端想说什么(前面那两句话,用1,2表示)long len;//文件长度int seek;//文件开始位置,点对点多线程断点续传的实现(2),用于多线程char name[100];//文

接着我们来看用户线程:

先看文件消息类定义:

struct fileinfo
{
  int fileno;//文件号
  int type;//客户端想说什么(前面那两句话,用1,2表示)
  long len;//文件长度
  int seek;//文件开始位置,用于多线程
  char name[100];//文件名
};

用户线程函数:

DWORD WINAPI clientthread(LPVOID lpparam)
{
  //文件消息
  fileinfo* fiinfo;
  //接收缓存
  char* m_buf;
   m_buf=new char[100];
  //监听函数传来的用户套接字
  SOCKET pthis=(SOCKET) lpparam;
  //读传来的信息
  int aa=readn(pthis,m_buf,100);
  //如果有 错就返回
  if(aa<0){
    closesocket (pthis);
    return -1;
  }
  //把传来的信息转为定义的文件信息
  fiinfo=(fileinfo*)m_buf;
   CString aaa;
  //检验客户想说什么
  switch(fiinfo->type)
  {
  //我要读文件信息
  case 0:
  //读文件
  aa=sendn(pthis,(char*) zmfile,1080);
  //有错
  if(aa<0){
    closesocket (pthis);
    return -1;
  }
  //发消息给主函数
  aaa="收到LIST命令 \n";
    AfxGetMainWnd()->SendMessageToDescendants(WM_AGE1,(LPARAM) aaa.GetBuffer(0),1);
  break;
  //我准备好了,可以传文件了
  case 2:
  //发文件消息给主函数
  aaa.Format("%s 文件被请求!% s\n",zmfile[fiinfo->fileno].name,nameph[fiinfo->fileno]);
   AfxGetMainWnd()->SendMessageToDescendants(WM_AGE1,(LPARAM)aaa.GetBuffer(0),1);
   //读文件,并传送
  readfile(pthis,fiinfo->seek,fiinfo->len,fiinfo- >fileno);
  //听不懂你说什么
  default:
  aaa="接收协议错误! \n";
    AfxGetMainWnd()->SendMessageToDescendants(WM_AGE1,(LPARAM) aaa.GetBuffer(0),1);
  break;
}
  return 0;
}

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

Tags:线程 断点 实现

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