实验七-网络程序设计综合实验_第1页
实验七-网络程序设计综合实验_第2页
实验七-网络程序设计综合实验_第3页
实验七-网络程序设计综合实验_第4页
实验七-网络程序设计综合实验_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络程序设计实验报告 实验名称:winsock编程接口实验实验类型:设计型指导教师:贾浩专业班级:信安1204姓名:马灿学号:20123252电子邮件:实验地点:东6E307实验日期:

实验成绩:__________________________

实验七网络程序设计综合实验摘要:本课程设计包含了文件传输协议的简单设计与实现。文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。文件传输协议的简单设计与实现建立在计算机网络实验环境TCP/IP网络体系结构之上,使用socket编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),利用了已有网络环境设计并实现简单应用层协议。本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,调试过程中出现的问题及相应解决办法,实验运行结果,核心程序,个人体会及建议等。关键词:SOCKET编程,FTPclient/server程序一.问题描述及设计思路1.1问题描述服务器端:1.指定一个目录作为FTP目录(之后所有的文件操作均在此目录下进行)2.接收客户端的命令请求并提供相应的服务。客户端:完成与FTP用户的人机界面,以命令的方式向服务器请求服务,主要的命令有:1.CONNECTIP地址端口号2.指定FTP服务器的IP地址和端口号,连接到服务器。响应:连接成功/失败。3.LOGIN用户名4.用户登录(假设在服务器端有用户管理功能)5.响应:若用户不存在,提示“无此用户”;若用户存在,提示“密码:”;用户输入密码后,若正确提示“登录成功”;若不成功,提示“密码错误”。6.3.DIR7.显示FTP服务器的FTP目录的文件列表(假设无子目录)8.响应:目录列表(只要文件名即可)。9.4.GET文件名10.将FTP目录下的文件下载到本地,支持断点续传11.响应:传送成功/失败/无此文件。12.5.PUT文件名13.将本地文件上传到FTP目录,支持断点续传14.响应:传送成功/失败/无此文件。15.6.HELP(客户端和服务器端均有该功能)16.实验环境本次实验采用MFC工程工程采用MFC对话框界面工程名称为MyServer和FTPSOCKET。17.详细设计过程1.2设计思路1.FTP协议基础3、主要功能流程图(1)文件传输流程图2、用例描述(1)文件传送用例描述二.功能实现及主要代码服务器端启动服务,端口号为8888客户端连接服务,服务器的ip地址为15连接成功添加用户用户验证上传文件2.txt,上传到C盘刷新服务器,c盘中有2.txt,上传成功添加文件下载文件文件下载到E盘三实验总结通过这次实验,我很好的了解到了文件传输的流程,了解到文件传输协议使得主机间可以共享文件。FTP使用TCP生成一个虚拟连接用于控制信息,然后再生成一个单独的TCP连接用于数据传输。控制连接使用类似TELNET协议在主机间交换命令和消息。文件传输协议是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。对套接字的使用和通信模型通信机制有了进一步了解,也熟练的掌握了如何选择通信模型。对各个函数的使用也有了进一步了解。四附录代码:服务器初始化套接字BOOLCFTPServerDlg::InitSocket(){ if(m_sock==INVALID_SOCKET) { m_sock=socket(AF_INET,SOCK_STREAM,0); } if(INVALID_SOCKET==m_sock) { MessageBox("创建套接字失败!"); returnFALSE; } CStringsPort; GetDlgItem(IDC_EDIT_PORT)->GetWindowText(sPort); MessageBox("开启的端口:"+sPort); intnPort=atoi(sPort); if(nPort<1||nPort>65535) { MessageBox("端口号错误!"); returnFALSE; } SOCKADDR_INsrvAddr; srvAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); srvAddr.sin_family=AF_INET; srvAddr.sin_port=htons(nPort); if(bind(m_sock,(SOCKADDR*)&srvAddr,sizeof(SOCKADDR))==SOCKET_ERROR) { closesocket(m_sock); MessageBox("绑定套接字失败!"); returnFALSE; } returnTRUE;}FileInfofile[10];intcount=0;CStringstr[10];使用异步选择模型HCURSORCFTPServerDlg::OnQueryDragIcon(){ return(HCURSOR)m_hIcon;}//-----------------------------启动服务----------------------//voidCFTPServerDlg::OnStart(){ //进入监听状态 InitSocket(); //设置socket为窗口通知消息类型 //进入监听模式 intm_nClient=listen(m_sock,5); if(m_nClient!=0) { MessageBox("Listenerror!"); closesocket(m_sock); return; } // MessageBox("Listensuccess!"); //注册网络注册网络异步事件,m_hWnd为应用程序的主对话框或主窗口的句柄 if(::WSAAsyncSelect(m_sock,m_hWnd,WM_SOCKET, FD_ACCEPT|FD_CLOSE|FD_READ|FD_WRITE)==SOCKET_ERROR) { MessageBox("WSAAsyncSelectfail!"); } else { MessageBox("WSAAsyncSelectsuccess!"); } 客户端连接服务voidCFTPClientDlg::OnConnect(){//先获得IP控件的值BYTEnField0,nField1,nField2,nField3; m_IP.GetAddress(nField0,nField1,nField2,nField3); charbuff[20]; wsprintf(buff,"%d.%d.%d.%d",nField0,nField1,nField2,nField3); MessageBox(buff); //获取端口号的值 intport=atoi(m_port); m_sock=socket(AF_INET,SOCK_STREAM,0); if(INVALID_SOCKET==m_sock) { // MessageBox("创建套接字失败!"); return; } // else // MessageBox("创建套接字成功!"); SOCKADDR_INsrvAddr; srvAddr.sin_addr.S_un.S_addr=inet_addr(buff); srvAddr.sin_family=AF_INET;srvAddr.sin_port=htons(port); // srvAddr.sin_port=htons(8888); if(::connect(m_sock,(sockaddr*)&srvAddr,sizeof(srvAddr))==-1) { MessageBox("连接失败"); return; } else MessageBox("连接服务器成功"); UpdateList();}上传文件//-----------------------上传文件到服务器--------------------------//voidCFTPClientDlg::OnPutFile(){/* if(!UserVerfify()) { MessageBox("该用户不存在"); return; }*/ CFileDialogfileDlg(TRUE,NULL,NULL);if(fileDlg.DoModal()==IDCANCEL) return; CStringfileName,filePath;//文件名文件路径 CStringfileType;//文件类型intfileLength; filePath=fileDlg.GetPathName(); CFilenewFile;newFile.Open(filePath,CFile::modeRead|CFile::modeReadWrite); //获取文件的名字,大小,路径 fileName=newFile.GetFileName(); fileName+="#";//为了区别文件名和传输的内容 fileLength=newFile.GetLength(); // char*pbuf=newchar[1024];//pbuf存储文件内容// memset(pbuf,0,1024); char*pbuf=newchar[MAXSIZE];//pbuf存储文件内容 memset(pbuf,0,MAXSIZE);// charpbuf[1024]={0}; //UINTnBytesRead=newFile.Read(pbuf,fileLength); UINTnBytesRead=newFile.Read(pbuf,MAXSIZE); //-------------用数字1表示上传文件名的识别码---------//// fileName="1"+fileName; CStringpbuf1; pbuf1.Format(pbuf); fileName="1"+fileName+pbuf; //char*fName1=(LPSTR)(LPCTSTR)fileName;// strcat(fName1,pbuf);///////////////////////此语句有问题/////////////////////////////MessageBox(fileName);// MessageBox(fName1); newFile.Close(); if(nBytesRead>0) { // if(send(m_sock,fName1,strlen(fName1)+1,0)==SOCKET_ERROR)if(send(m_sock,fileName,strlen(fileName)+1,0)==SOCKET_ERROR) return; }}下载文件列表 voidCFTPClientDlg::OnDblclkFileList(NMHDR*pNMHDR,LRESULT*pResult) { //TODO:Addyourcontrolnotificationhandlercodehere intm_count=m_fileList.GetItemCount(); if(m_count<=0) { MessageBox("没

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论