下载工具的设计与开发毕业论文(编辑修改稿)内容摘要:

fo[IdInfoTaskID].filename,CFile::modeWrite|CFile::shareDenyNone)。 AfxParseURL((LPCTSTR)(pViewm_taskdowninfo[IdInfoTaskID].url),dwServiceType,strServer, strObject, nPort)。 pRequestHeader = ((LPTSTR)(LPCTSTR)strServer,(LPTSTR)(LPCTSTR)strObject,nLength,NULL,NULL,pViewm_taskdowninfo[IdInfoTaskID].ThreadDownInfo[IdInfoThreadID].FromBytes,pViewm_taskdowninfo[IdInfoTaskID].ThreadDownInfo[IdInfoThreadID].ToBytes,0,NULL)。 DownloadFileSeek(pViewm_taskdowninfo[IdInfoTaskID].ThreadDownInfo[IdInfoThreadID].FromBytes,CFile::begin)。 //设置文件指针位置 */ ()。 ((LPTSTR)(LPCTSTR)strServer,nPort)。 ()。 pResponseHeader=()。 int nSvrState = ()。 CString csState。 分布式下载工具的设计与开发 19 (%d,nSvrState)。 csState=(1)。 if(csState==2) { char pData[5024]。 //用于存放接收数据的字符数组 long nReceSize = 0。 //实际接收数据的长度 (服务器返回来的值 ) CString fpath。 long rsize,sendsize。 rsize=0。 sendsize=0。 long nsize。 char buf1[5024]。 nsize=pViewm_taskdowninfo[IdInfoTaskID].ThreadDownInfo[IdInfoThreadID].ToBytespViewm_taskdowninfo[IdInfoTaskID].ThreadDownInfo[IdInfoThreadID].FromBytes。 while(rsizensize) { nReceSize = (pData,5024)。 if(nReceSize=0) { ()。 //没有可以接收的数据 ,关闭 Socket AfxMessageBox(没有可接收的数据 )。 break。 //return while(TRUE) ! } DownloadFileWrite(pData,nReceSize)。 rsize=rsize+nReceSize。 pViewm_taskdowninfo[IdInfoTaskID].finishsize+=nReceSize。 } DownloadFileClose()。 20 pViewm_taskdowninfo[IdInfoTaskID].ThreadDownInfo[IdInfoThreadID].FinishFlag=true。 ::PostMessage(pViewm_hWnd,WM_SENDDATA,0,(long)amp。 IdInfo)。 } return 0。 } 2. 连接其他用户代码 UINT CHttpDowndLoad::MTConnectThread(LPVOID pParam) { //得到视图类的指针 // CDownLoadView* dlv。 CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()m_pMainWnd。 // Get the active MDI child window. CMDIChildWnd *pChild=(CMDIChildWnd *) pFrameGetActiveFrame()。 // Get the active view attached to the active MDI child window. POSITION pos=pChildGetActiveDocument()GetFirstViewPosition()。 CDownLoadView *pView=(CDownLoadView*)pChildGetActiveDocument()GetNextView(pos)。 IDInfo *IdInfo。 IdInfo=new IDInfo。 IdInfo=(IDInfo*)pParam。 char buf[1024]。 sockaddr_in addr。 = i_addr(pViewm_taskdowninfo[IdInfoTaskID].UserDownInfo[IdInfoThreadID].UserIP)。 =AF_INET。 =LOCAL_PORT。 WSADATA wsaData。 WSAStartup(0x101,amp。 wsaData)。 分布式下载工具的设计与开发 21 SOCKET g_ConnectSocket。 g_ConnectSocket = socket(AF_INET, SOCK_STREAM,0)。 if(g_ConnectSocket==INVALID_SOCKET) { return 1。 } if(connect(g_ConnectSocket,(sockaddr*)amp。 addr,sizeof(addr))==1) { AfxMessageBox(无法连接到客户机 )。 return 1。 } pViewm_taskdowninfo[IdInfoTaskID].UserDownInfo[IdInfoThreadID].s=g_ConnectSocket。 CString temp,finishsize,fromsize。 (%d,pViewm_taskdowninfo[IdInfoTaskID].UserDownInfo[IdInfoThreadID].FromBytes)。 (%d,pViewm_taskdowninfo[IdInfoTaskID].UserDownInfo[IdInfoThreadID].ToBytes)。 temp=URL:。 temp+=pViewm_taskdowninfo[IdInfoTaskID].url。 temp+=lfromsize:。 temp+=fromsize。 temp+=lfinishsize:。 temp+=finishsize。 temp+=。 strcpy(buf,temp)。 int slen。 slen=0。 int tlen。 tlen=()。 22 while(slentlen) slen+=send(g_ConnectSocket,buf,tlen,0)。 CString temp2。 int rlen2。 char buf2[100]。 rlen2=0。 while(true) { rlen2=recv(g_ConnectSocket,buf2,100,0)。 temp2=buf2。 if((cmd:recv)=0) { break。 } else if((cmd:end)=0) { closesocket(g_ConnectSocket)。 ::PostMessage(pViewm_hWnd,WM_CHANGEUSR,(long)IdInfo,0)。 return 0。 } else { CString speed2,finishsize2,time2。 ParseBuf2(buf2,finishsize2,speed2,time2)。 pViewm_taskdowninfo[IdInfoTaskID].UserDownInfo[IdInfoThreadID].Rate=finishsize2。 pViewm_taskdowninfo[IdInfoTaskID].UserDownInfo[IdInfoThreadID].Speed=speed2。 分布式下载工具的设计与开发 23 pViewm_taskdowninfo[IdInfoTaskID].UserDownInfo[IdInfoThreadID].Time=time2。 } } CFile* rfile。 //打开在 StartHttpDownLoad()中创建的文件 rfile=new CFile。 rfileOpen(pViewm_taskdowninfo[IdInfoTaskID].savepath+pViewm_taskdowninfo[IdInfoTaskID].filename,CFile::modeWrite|CFile::shareDenyNone)。 rfileSeek(pViewm_taskdowninfo[IdInfoTaskID].UserDownInfo[IdInfoThreadID].FromBytes,CFile::begin)。 //设置文件指针位置 long rlength,len,buflen,startsize。 rlength=0。 char buf1[5024]。 while(rlengthpViewm_taskdowninfo[IdInfoTaskID].UserDownInfo[IdInfoThreadID].ToBytespViewm_taskdowninfo[IdInfoTaskID].UserDownInfo[IdInfoThreadID].FromBytes) { len=recv(g_ConnectSocket,buf1,5024,0)。 rfileWrite(buf1,len)。 rlength+=len。 pViewm_taskdowninfo[IdInfoTaskID].finishsize+=pViewm_taskdowninfo[IdInfoTaskID].finishsize。 } rfileClose。 return 0。 } 3. 点对点互传代码 UINT CHttpDowndLoad::SendFile(LPVOID pParam) { //得到视图类的指针 24 // CDownLoadView* dlv。 CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()m_pMainWnd。 // Get the active MDI child window. CMDIChildWnd *pChild=(CMDIChildWnd *) pFrameGetActiveFrame()。 // Get the active view attached to the active MDI child window. POSITION pos=pChildGetActiveDocument()GetFirstViewPosition()。 CDownLoadView *pView=(CDownLoadView*)pChildGetActiveDocument()GetNextView(pos)。 ConnectInfo *ConInfo。 ConInfo=(ConnectInfo *)pParam。 long FileSize。 long ReadSize。 long SendSize。 long TempSize。 CString temp。 CString SFileSize。 char buf[128]。 char data[5*1024]。 CFile pFile。 if((ConInfoPath,CFile::modeRead|CFile::shareDenyNone)) {。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。