




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络编程实验报告指导老师:黄梅根姓名:学号:班级:
实验题目:网络文件传输实验目的:了解网络文件传输的方法,了解FTP协议基础,学习使用WinSock实现网络文件的传输。了解点对点(P2P)网络文件传输的方法,学习使用WinSock实现P2P网络文件的传输实验要求:通过编程实现网络文件传输程序实验内容:FTP协议基础FTP是TCP/IP协议组中的协议之一,该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上或从自己计算机中拷贝至远程计算机上。在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。网络文件传输原理在通信的时候主要可以分为两个部分,一个部分是用于传送控制信息,例如发送文件的请求,文件的名称、大小等,采用MFC所提供的CSocket类的串行化技术来实现;而另一个部分就是文件的传输部分,对于文件的传输,由于数据量相对来说比较大,使用两个线程,一个用于发送,一个用于接收。这两个部分在具体实现的时候分别建立有自己的套接字。FTP编程基础FTP传输原理FTP协议使用两条单独的TCP连接,一条专用于发送FTP命令,另一条则专用于传递数据。初始建立连接时,服务器在21号端口上接收来自客户端的命令连接。当需要传送数据时(文件列表、文件数据等),客户端向服务器发出Port命令,并进入监听状态,等待来自服务器的数据连接请求。连接到FTP服务器,首先需要创建一个CInternetSession对象,用类CInterSession创建并初始化一个或几个同时存在的Internet会话,并描述与代理服务器的连接,如果在程序运行期间需要保持与Internet的连接,可以创建一个CInternetSession对象作为类CWinApp的成员。MFC中的类CFtpConnection管理与Internet服务器的连接,并直接操作服务器上的目录和文件,FTP是MFC的WinInet支持的三个Internet功能之一,创建一个CInternetSession实例和一个CFtpConnection对象就可以实现和一个FTP服务器通信,不需要直接创建CFtpConnection对象,而是通过调用CInternetSession::GetFtpConnection来完成这项工作。它创建CFtpConnection对象并返回一个指向该对象的指针。实验环境:本次实验采用MFC工程,工程采用MFC对话框界面,工程名称为Ftp,生成的类有CFtpApp类和CFtpDlg类。实验步骤:控件与变量的关联表:DDX_Control(pDX,IDC_UPLOAD,m_btnUpload);DDX_Control(pDX,IDC_DOWNLOAD,m_btnDownload);DDX_Control(pDX,IDOK,m_btnQuery);DDX_Control(pDX,IDC_LIST_FILE,m_listFile);DDX_Control(pDX,IDC_EDIT_PWD,m_editPwd);DDX_Control(pDX,IDC_EDIT_NAME,m_editName);DDX_Control(pDX,IDC_EDIT_FTP,m_editFtp);DDX_Text(pDX,IDC_EDIT_FTP,m_strFtp);DDX_Text(pDX,IDC_EDIT_NAME,m_strName);DDX_Text(pDX,IDC_EDIT_PWD,m_strPwd);各个函数体代码:voidCFtpDlg::OnQuery()//查询的响应函数{ CInternetSession*pSession;//定义会话对象指针变量 CFtpConnection*pConnection;//定义连接对象指针变量 CFtpFileFind*pFileFind;//定义文件查询对象指针变量 CStringstrFileName; BOOLbContinue; pConnection=NULL; pFileFind=NULL; UpdateData(TRUE);//获得用户的当前输入(服务器名,用户名和口令) while(m_listFile.GetCount()!=0)m_listFile.DeleteString(0);//清除列表框的内容 pSession=newCInternetSession(//创建Internet会话类对象 AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS); try {//试图建立与指定FTP服务器的连接 pConnection=pSession->GetFtpConnection(m_strFtp,m_strName,m_strPwd); }catch(CInternetException*e){ e->Delete();//无法建立连接,进行错误处理 pConnection=NULL; } if(pConnection!=NULL) { //创建CFtpFileFind对象,向构造函数传递CFtpConnection对象的指针 pFileFind=newCFtpFileFind(pConnection); bContinue=pFileFind->FindFile("*");//查找服务器上当前目录的任意文件 if(!bContinue)//如果一个文件都找不到,结束查找 { pFileFind->Close(); pFileFind=NULL; } while(bContinue)//找到了第一个文件,继续找其它的文件 { strFileName=pFileFind->GetFileName();//获得找到的文件的文件名 //如果找到的是否目录,将目录名放在括弧中 if(pFileFind->IsDirectory())strFileName="["+strFileName+"]"; //将找到的文件或目录名显示在列表框中。 m_listFile.AddString(strFileName); bContinue=pFileFind->FindNextFile();//查找下一个文件 } if(pFileFind!=NULL) { pFileFind->Close();//结束查询 pFileFind=NULL; } } deletepFileFind;//删除文件查询对象 if(pConnection!=NULL) { pConnection->Close(); deletepConnection;//删除FTP连接对象 } deletepSession;//删除Internet会话对象}voidCFtpDlg::OnDownload()//下载响应函数{ UpdateData(TRUE); CStringstrSourceName; //获得用户在列表框中的选择 nSel=m_listFile.GetCurSel(); m_listFile.GetText(nSel,strSourceName); if(strSourceName.GetAt(0)!='[') { //选择的是文件 CStringstrDestName; CFileDialogdlg(FALSE,"","*.*");//定义了一个文件对话框对象变量 if(dlg.DoModal()==IDOK)//激活文件对话框 { //获得下载文件在本地机上存储的路径和名称 strDestName=dlg.GetPathName(); //调用函数下载文件 if(Download(strSourceName,strDestName)) AfxMessageBox("下载成功!",MB_OK|MB_ICONINFORMATION); else AfxMessageBox("下载失败!",MB_OK|MB_ICONSTOP); } else { AfxMessageBox("请写入文件名!",MB_OK|MB_ICONSTOP); } } Else { //选择的是目录 AfxMessageBox("不能下载目录!请重选!",MB_OK|MB_ICONSTOP); } //控件是否可用的处理 m_btnDownload.EnableWindow(FALSE); m_btnUpload.EnableWindow(TRUE); m_btnQuery.EnableWindow(TRUE); m_editFtp.EnableWindow(TRUE); m_editName.EnableWindow(TRUE); m_editPwd.EnableWindow(TRUE); m_staFtp.EnableWindow(TRUE); m_staName.EnableWindow(TRUE); m_staPwd.EnableWindow(TRUE);}BOOLCFtpDlg::Download(CStringstrSName,CStringstrDName)//下载响应函数{ CInternetSession*pSession;//定义会话对象变量指针 CFtpConnection*pConnection;//定义连接对象变量指针 pConnection=NULL; //创建Internet会话对象 pSession=newCInternetSession(AfxGetAppName(),1, PRE_CONFIG_INTERNET_ACCESS); try { //建立FTP连接 pConnection=pSession->GetFtpConnection(m_strFtp, m_strName,m_strPwd); } catch(CInternetException*e) { //错误处理 e->Delete(); pConnection=NULL; returnFALSE; } if(pConnection!=NULL) { //下载文件 if(!pConnection->GetFile(strSName,strDName)) { //下载文件错误 pConnection->Close(); deletepConnection; deletepSession; returnFALSE; } } if(pConnection!=NULL) { pConnection->Close(); deletepConnection; } deletepSession; returnTRUE;}voidCFtpDlg::OnUpload()//上传响应函数{ UpdateData(TRUE); //控件是否可用的处理 m_editFtp.EnableWindow(FALSE);//服务器域名输入文本框 m_editName.EnableWindow(FALSE);//登录客户名输入文本框 m_editPwd.EnableWindow(FALSE);//口令输入文本框 m_staFtp.EnableWindow(FALSE); m_staName.EnableWindow(FALSE); m_staPwd.EnableWindow(FALSE); m_btnQuery.EnableWindow(FALSE); CStringstrSourceName; CStringstrDestName; CFileDialogdlg(TRUE,"","*.*");//定义文本对话框对象变量 if(dlg.DoModal()==IDOK) { //获得待上传的本地机文件路径和文件名 strSourceName=dlg.GetPathName(); strDestName=dlg.GetFileName(); //调用Upload函数上传文件 if(Upload(strSourceName,strDestName)) A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年嘉兴桐乡市卫生健康局下属部分医疗卫生单位招聘编外合同人员62人考试备考试题及答案解析
- 新一代物联网项目合作协议
- 2025年宿州泗县大学生乡村医生专项计划招聘2人考试备考试题及答案解析
- 2025云南大学招聘行政助理49人笔试模拟试题及答案解析
- 2025内蒙古巴彦淖尔市交通投资(集团)有限公司招聘中高级经营管理人员8人考试模拟试题及答案解析
- 2025四川飞机维修工程有限公司招聘10人笔试备考题库及答案解析
- 2025国家卫生健康委能力建设和继续教育中心面向社会招聘2人笔试模拟试题及答案解析
- 2025浙江温州市鹿城区区属国有企业面向社会和面向退役士兵招聘(选聘)34人考试参考题库附答案解析
- 路桥系毕业论文5000
- 护理本科毕业论文范本
- 动画场景设计流程
- 2025年6月22日四川省市直事业单位遴选笔试真题及答案解析
- 2025年山东省济南市中考英语模拟试题(含答案)
- 公安涉密载体管理制度
- 2025年中国蛇养殖行业市场前景预测及投资价值评估分析报告
- JG/T 536-2017热固复合聚苯乙烯泡沫保温板
- T/CSIQ 8008-2018正装鞋
- 船舶拖带协议书
- 儿童血压测量课件
- 《智慧城市发展概况》课件
- 水利工程危险源辨识与风险评价报告模板
评论
0/150
提交评论