您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 网路编程-局域网文件传输系统报告
河北科技大学课程设计报告学生姓名:学号:专业班级:网络081课程名称:网络编程技术学年学期:2010—2011学年第2学期指导教师:2011年6月课程设计成绩评定表学生姓名学号成绩专业班级网络081起止时间2011.6.6-2011.6.12设计题目局域网文件传输系统指导教师评语指导教师:年月日目录1.设计题目...........................................12.设计目的...........................................13.设计要求...........................................14.程序设计过程.......................................14.1设计分析.........................................14.2程序流程图.......................................25.程序源代码.........................................25.1获取在线用户名及IP..............................25.2发送文件及接收文件...............................45.3刷新列表.........................................65.4输及退出.........................................66.运行调试...........................................76.1文件传输运行主界面窗口...........................76.2发送文件及接收文件界面...........................86.3中止文件传输界面................................106.4刷新列表界面....................................117.总结..............................................117.1主要问题........................................117.2收获心得........................................12-1-1.设计题目局域网文件传输系统2.设计目的1.基本掌握设计课题的基本步骤和方法;2.掌握可视化开发具体的使用;3.根据课题的要求进行上机调试;4.掌握面相对象编程的基本思路和方法;5.掌握socket的建立、监听、连接和数据收发编程实现。3.设计要求1.实现局域网内多台计算机间的文件传送,达到共享的目的;2.程序能够动态的监听在线用户,并自动获得机器名及相应IP;3.能够随时终止文件的传输;4.双方可知道对方的状态,以及文件的接受率,传输率及文件大小的情况,可随时中止和退出接受。4.程序设计过程4.1设计分析本系统的开发采用基于winsocket的广播发送模式,在局域网内进行全网广播,以得到在线用户的主机名和相应的IP。根据FTP协议的特点采用TCP链路进行传输控制,UDP组播进行数据传输的方式,实现文件的传输。设计为了方便,可以设计出FMV类图形用户界面,并添加相应的相应按钮。-2-4.2程序流程图图1程序流程图5.程序源代码5.1获取在线用户名及IPvoidCFiletransDlg::BroadCastSend(){//发请求返回在线确认消息,以获得在线用户信息。-3-sockaddr_inaddrTo;addrTo.sin_addr.S_un.S_addr=htonl(INADDR_BROADCAST);addrTo.sin_family=AF_INET;addrTo.sin_port=htons(RECVPORT);//获取主机名charphost[200];chartemp[400];memset(phost,0,200);memset(temp,0,400);if(0==gethostname(phost,200));elsestrcpy(phost,Yang);strcpy(temp,\t\t\t\t);//指定报头为请求返回在线确认消息。strcat(temp,phost);//向本子网内请求返回在线确认消息。interr=sendto(m_sockSend,temp,strlen(temp)+1,0,(sockaddr*)&addrTo,sizeof(sockaddr));if(SOCKET_ERROR==err){//MessageBox(广播发送数据失败。);return;}err=sendto(m_sockSend,temp,strlen(temp)+1,0,(sockaddr*)&addrTo,sizeof(sockaddr));if(SOCKET_ERROR==err){-4-//MessageBox(广播发送数据失败。);return;}}5.2发送文件及接收文件//发送文件voidCFiletransDlg::OnSendFile(){//TODO:AddyourcontrolnotificationhandlercodehereCStringip;if(!GetIPAddr(ip)){return;}intmodal,nCount;//modal表示返回对话框的结果CStringfileName;//文件的名字CFileDialogfdlg(true);//打开文件对话框modal=fdlg.DoModal();if(IDCANCEL==modal){return;//用户取消发送。}SENDFILEPARAM*p=newSENDFILEPARAM;fileName=fdlg.GetFileName();p-pathName=fdlg.GetPathName();nCount=fileName.GetLength();memset(p-fileName,0,NAMELENGTH);for(inti=0;inCount;i++){p-fileName[i]=fileName.GetAt(i);}p-pCLAN=this;p-ip=ip;::AfxBeginThread(SendFileSingle,(LPVOID)p);return;}-5-//收文件UINTSaveFileSingle(LPVOIDparam){SAVEFILEPARAMsp;sp.pCLAN=((SAVEFILEPARAM*)param)-pCLAN;sp.sock=((SAVEFILEPARAM*)param)-sock;CSocketsock;sock.Attach(sp.sock);DWORDLength;charfileName[NAMELENGTH];CStringsavePathName;intmodal,err;memset(fileName,0,NAMELENGTH);err=sock.Receive(&Length,sizeof(DWORD));//接收文件长度if(0==err){AfxMessageBox(连接被关闭了。);sock.Close();//重置事件对象为有信号状态,准备下次接收。if(!SetEvent(g_hEventRecv)){return0;}if(0==finish){CStringstrFinis;if(stepLength){strFinis.Format(发送方停止传输\r\n\r\n%s,fileName);AfxMessageBox(strFinis);}else{CStringstrFinish;strFinish.Format(已成功接收文件\r\n\r\n%s,fileName);AfxMessageBox(strFinish);}}else{if(!m_stop){m_stop=true;-6-CStringstrFinis;strFinis.Format(接受方停止接受\r\n\r\n%s,fileName);AfxMessageBox(strFinis);}}return0;}5.3刷新列表voidCFiletransDlg::OnFlushList(){intnListItemCount=this-m_IPlist.GetItemCount();for(inti=0;inListItemCount;i++){this-m_IPlist.DeleteItem(i);}BroadCastSend();}5.4输及退出//中止文件传输voidCFiletransDlg::OnStoptrans(){if(MessageBox(_T(真的要停止文件传输吗?),_T(警告),MB_ICONEXCLAMATION|MB_YESNO)==IDYES){m_stop=false;return;}}//退出voidCFiletransDlg::OnClose(){BroadCastExit();//通知其他主机我下线了。if(INVALID_SOCKET!=m_sockRecv)closesocket(m_sockRecv);if(INVALID_SOCKET!=m_sockSend)closesocket(m_sockSend);-7-ResetEvent(g_hEventRecv);ResetEvent(g_hEventSend);DeleteCriticalSection(&g_criticalSend);DeleteCriticalSection(&g_criticalRecv);CDialog::OnCancel();CDialog::OnClose();}6.运行调试6.1文件传输运行主界面窗口图2文件传输主界面-8-6.2发送文件及接收文件界面图3发送文件界面图4接收文件窗口-9-图5文件传输过程显示图6接收文件成功界面-10-6.3中止文件传输界面图7文件中止传输确定图8中止传输后返回错误界面-11-6.4刷新列表界面图9刷新界面对比7.总结7.1主要问题1.如何设计选择多个用户接收同一个文件;2.如何一次选择传输多个文件;3.怎样可以传输整个未打包文件夹-12-7.2收获心得在一起讨论着完成这个过程中,虽然自己不是知道很多,虽然自己没能够编写多少代码,不过在这个过程中确实学到了很多。在要添加进度条去显示传输百分多少功能时,通过上网查,看书,也找到了相应的函数并添加成功了。更换了原来就有的图标,虽然简单,却也知道了方法。也知道了要用全广播进行局域网广播以获取在线主机名及主机IP。自己动手确实能够学到很多东西,而且会学的很快。
本文标题:网路编程-局域网文件传输系统报告
链接地址:https://www.777doc.com/doc-4011990 .html