实验七网络程序设计综合实验.docx

上传人:夺命阿水 文档编号:805747 上传时间:2023-12-02 格式:DOCX 页数:26 大小:335.45KB
返回 下载 相关 举报
实验七网络程序设计综合实验.docx_第1页
第1页 / 共26页
实验七网络程序设计综合实验.docx_第2页
第2页 / 共26页
实验七网络程序设计综合实验.docx_第3页
第3页 / 共26页
实验七网络程序设计综合实验.docx_第4页
第4页 / 共26页
实验七网络程序设计综合实验.docx_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《实验七网络程序设计综合实验.docx》由会员分享,可在线阅读,更多相关《实验七网络程序设计综合实验.docx(26页珍藏版)》请在课桌文档上搜索。

1、网络程序设计实验报告实验名称:W名SoCk编程接口实验实验类型:设计型指导教师:贾浩专业班级:信安1204姓名:马灿学号:20123252电子邮件:实验地点:东6E307实验日期:实验成绩:实验七网络程序设计综合实验摘要:本课程设计包含了文件传输协议的简单设计及实现。文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。文件传输协议的简单设计及实现建立在计算机网络实验环境TCP/IP网络体系结构之上,使用socket编程接口编写两个程序,分别为客户程序(Client.c)和服务器程序(server,c),利用了己有网络环境

2、设计并实现简单应用层协议。本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,调试过程中出现的问题及相应解决办法,实验运行结果,核心程序,个人体会及建议等。关键词:SOCKET编程,FTPclientZserver程序一.问题描述及设计思路1.I问题描述服务器端:1 .指定一个目录作为FTP目录(之后所有的文件操作均在此目录下进行)2 .接收客户端的命令请求并提供相应的服务。客户端:完成及FTP用户的人机界面,以命令的方式向服务器请求服务,主要的命令有:1.CONNECTIP地址端口号3 .指定FTP服务器的IP地址和端口号,连接到服务器。响应:连接成功/失败。3 .LOGlN用

3、户名4 .用户登录(假设在服务器端有用户管理功能)5 .响应:若用户不存在,提示“无此用户:若用户存在,提示“密码:;用户输入密码后,若正确提示“登录成功”;若不成功,提示密码错误”。6 .3.DIR7 .显示FTP服务器的FTP目录的文件列表(假设无子目录)8 .响应:目录列表(只要文件名即可)。9 .4.GET文件名10 .将FTP目录下的文件下载到本地,支持断点续传11 .响应:传送成功/失败/无此文件。12 .5.PUT文件名13 .将本地文件上传到FTP目录,支持断点续传14 .响应:传送成功/失败/无此文件。15 .6.HELP(客户端和服务器端均有该功能)16 .实验环境本次实验

4、采用MFC工程工程采用MFC对话框界面工程名称为MyServer和FTPSOCKETo17 .详细设计过程1. 2设计思路2. FTP协议基础FTP是TCP/IP协议组中的协议之一,该协议是Internet文件传送的基础,它由一系列规格说明文档组成。目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上或从自己计算机中拷贝至远程计算机上。在TCP/IP协议中FTP标准命令TCP端口号为21,Port方式数据端口为20。3. 网络文件传输原理在通信的时候主要可以分为两个部分。一

5、个部分是用于传送控制信息,例如发送文件的请求文件的名称、大小等。采用MFC所提供的CSoCket类的串行化技术来实现,而另一个部分就是文件的传输部分。对于文件的传输,由于数据量相对来说比较大,使用两个线程。一个用于发送,一个用于接收。这两个部分在具体实现的时候分别建立有自己的套接字。FTP编程基础4. FTP传输原理FTP协议使用两条单独的TCP连接一条专用于发送FTP命令另一条则专用于传递数据。初始建立连接时服务器在21号端口上接收来自客户端的命令连接。当需要传送数据时文件列表、文件数据等客户端向服务器发出Port命令并进入监听状态等待来自服务器的数据连接请求。总体功能模块图服务器端线程控制

6、:线程类别:选择线程类别,单线程或多线程传送文件线程数设置:若选择多线程,可自行设置线程数目,若选择单线程,则默认线程数目为1启动服务器:设置好线程控制后,点击“启动”按钮启动服务器端选取文件:选择要发送给客户端的文件发送文件:获取要发送文件属性:获取到要传送给客户端的文件的基本属性,包括:文件名,大小(B),已发送多少(B),文件路径发送进度显示:显示给客户端发送文件的进度ChatWithSerVer:启动采用UDP协议的简单聊天系统,用来及客户端进行通讯(客户端和服务器端都得启动,否则无法收到)Help:显示服务器端使用说明客户端功能说明:握手服务器:输入服务器端IP地址,点击握手服务器”

7、按钮,获取服务器端启动的线程数连接服务器:及服务器进行连接接收文件:获取接收文件属性:获取到要接收的服务器端传来的文件的基本属性,包括:文件名,大小(B),已接收多少(B),文件存储路径接收进度显示:显示已接收文件的进度ChatWithServer:启动采用UDP协议的简单聊天系统,用来及客户端进行通讯(客户端和服务器端都得启动,否则无法收到)获取IP地址:获取本机的主机名及IP地址HELP:显示客户端使用说明2、系统结构即时通讯(1)文件传输流程图2、用例描述(1)文件传送用例描述用例名称I服务器端文件传输参与者:服务器端管理员W:服务器端管理员设置线程类别和启动的线程数目,启动服务器,选取

8、文件进行发送前置条件:服务器端管理员已经运行服务器端程序基三碗:1 .服务器端管理员通过鼠标点击线程类别和线程数目下拉列表框进行设置,然后点击启动按钮,启动服务器.2点击选取文件按钮,选择要传送给客户端的文件,在文件属性框中显示出相应文件的信息,点击发送文件按钮,进行文件传输.3 .点击退出搜钮,退出服务器端4 .点击帮助按钮可以查看使用说明5 .用例终止真他事件流AIl在按泼送按钮之前,服务器罐管理员随时可以搜退出按钮,终止与客户端的酷携,即终止与客户端之间的文件传送.异常事件流:1 .提示错误信息,文件传送失败用例名称,客户端文件传输参与者:客户iWiM客户输入服务器端IP地址,链接服务器

9、,进行文件捂收BSf客户运行客户端应用程序基本事件流:2 .服务器端选择账户,点击开始服务,则进入监听状态,等待客户端请求.3 .客户端输入用户名及密码,若与服务器端匹配,则在文本框中显示连接服务器,登陆用户名.连接失败则显示连接失败.4 .在diet列表框中点击要上传的文件,弹出对话框,寻问是否要上传,点击是,则上传文档至服务器篇.并将文档列表显示在列表框中.5 .点击终止服务,则退出程序.其他事件2SA1:在按技收技钮之前,客户随时可以按停止接收按钮,终止与服务器端之间的文件传送.在文件开始接收后,点击停止接收按钮,也籍止与服务器端之间的文件传送.异常事Fm:i.提示情误信息,文件传送失败

10、二.功能实现及主要代码服务器端启动服务,端口号为8888客户端连接服务,服务器的ip地址为111.9.118.115连接成功添加用户用户验证上传文件2.txt,上传到C盘刷新服务器,c盘中有2.txt,上传成功晔ZthlfcIJN乐4.TEMP2014/5/522:06文件夹,.TSLOG2013/4/411:01文件安a.Windows2014/5/1915:29文件典2东is里j.xampp2013/1/1719:29文咤ss2014/4/813:13文件夹【计IwI.wt文件央2014/5/516:55文件夹LTieafi(U)用户2012/12/2137文件夹J下箕(Ck)2014/5

11、/211&22文&又植IKB-x*e布、GetWindowText(sPort);MessageBox(开启的端口:+SPOrt);intnPort=atoi(sPort);if(nPort65535)MeSSageBOX(端口号错误!);returnFALSE;SockaddrinSrVAddr;srvAddr.sin_addr.Sun.Saddr=htonl(INADDRANY);srvAddr.Sinfamily=AF_INET;srvAddr.sin_port=htons(nPort);if(bind(m_sock,(SOCKADDR*)&srvAddr,Sizeof(SOCKADDR

12、)=SOCKET_ERROR)closesocket(msock);MessageBox(绑定套接字失败!);returnFALSE;returnTRUE;FileInfofile10;intcount=O;CStringstr10;使用异步选择模型HCURSORCFTPServerDlg:OnQueryDragIcon()return(HCURSOR)mhlcon;/启动服务voidCFTPServerDlg:OnStartO进入监听状态ItiitSocket();/设置SoCket为窗口通知消息类型进入监听模式intmnClient=listen(msock,5);if(mnClient!

13、=0)MeSSageBox(Listenerror!,);closesocket(msock);return:/MeSSageBOx(Listensuccess!*);注册网络注册网络异步事件,m_hWnd为应用程序的主对话框或主窗口的句柄if(:WSAAsyncSelect(msock,mhWnd,WM_SOCKET,fDAcceptIfdcloseIfDReadIfdwrite)=socket_error)MessageBox(,WSAAsyncSelectfail!v);elseMessageBox(WSAAsyncSelectsuccess!);I客户端连接服务voidCFTPClie

14、ntDlg:OnConnect()先获得IP控件的值BYTEnFieldO,nFieldl,nField2,nField3;mIP.GetAddress(nFieldO,nFieldl,nField2,nField3);charbuff20;wsprintf(buff,%d.%d.%d.%d,nFieldO,nFieldl,nField2,nField3);MessageBox(buff);获取端口号的值intport=aLoi(mport);m_sock=SoCket(AFNET,SOCK.STREAM,O);if(INVALID_SOCKET=m_sock)/MeSSageBoX(创建套接

15、字失败!);return:/else/MessageBox(创建套接字成功!);SOCKADDR_INsrvAddr;srvAddr.sinaddr.Sun.Saddr=inet_addr(buff);srvAddr.sin_family=AF_INET;srvAddr.sin_port-htons(port);/srvAddr.sinport-htons(8888);if(:connect(msock,(sockaddr*)&srvAddr,sizeof(srvAddr)=-1)MeSSageBOX(连接失败);return:elseMeSSageBOX(连接服务器成功);UpdateLis

16、t();上传文件/上传文件到服务器/voidCFTPClientDlg:OnPutFile()*if(!UserVerfify()MeSSageBox(该用户不存在);return:*/CFileDialogfileDlg(TRUE,NULL,NULL);if(fiIeDlg.DoModalO=IDCANCEL)return;文件名CStringPileName1fiIePath;文件路径CStringfiIeType;intfileLength;fiIePath=fiIeDlg.GetPathNameO;CFilenewFile;newFile.Open(filePath,CFile:mod

17、eReadCFi1e:HiodeReadWrite);获取文件的名字,大小,路径fiIeName=newFile.GetFileName();fiIeName+=味别文件名和传输的内容fileLength-newFile.GetLengthO;/char*pbuf=newchar1024;文件内容/memset(pbuf,0,1024);char*pbuf=newcharMAXSIZE;文件内容memset(pbuf,O,MAXSIZE);/charpbf1024=0:/UINTnBytesRead=newFile.Read(文件类型为了区/buf存储/bf存储pbuf, fileLength

18、);MAXSIZE);/-用数字1表示上传文件名的识别码/UINTnBytesRead=newFile.Read(pbuf,/PileName=T+111eName:CStringpbuf1:pbuf1.Format(pbuf);fiIeName=1+fi1eName+pbuf;/char*PNamel=(LPSTR)(LPCTSTR)fIleName;/strcat(fNamel,pbuf);/此语句有问题/MessageBox(FileName);/MessageBoxCfNamel);newFile.Close();if(nBytesRead0)/if(send(msock,fNamel

19、,strlen(fNamel)+l,O)=SOCKETERROR)if(send(msock,fileName,strlen(fileName)+1,O)SOCKETERROR)return;下载文件列表voidCFTPClientDlg:ZOnDblclkFileList(NMHDR*pNMHDR,LRESULT*pResult)/TODO:Addyourcontrolnotificationhandlercodehereintmcount=m_fileList.GetItemCount();if(mcountGetWindowText(user);user=4+user;char*p=(LPSTR)(LPCTSTR)user;MessageBox(user);if(send(m_sock,p11024jO)=SOCKEERROR)MeSSageBoX(发送失败);return;charu1024二0;if(recv(m_sock,u,1024,O)=SOCKET_ERROR)MeSSageBox(接受数据失败);return;MessageBox(u);if(u0=T)MeSSageBox(用户验证成功);if(u0=F)MeSSageBOx(用户验证失败);m_sock=INVALID_SOCKET;1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号