《实验七网络程序设计综合实验.docx》由会员分享,可在线阅读,更多相关《实验七网络程序设计综合实验.docx(26页珍藏版)》请在第一文库网上搜索。
1、网络程序设计实验报告实验名称:W名SOCk编程接口实验实验类型:设计型指导教师:贾浩专业班级:信安1204姓名:马灿学号:20123252电子邮件:实验地点:东6E307实验日期:实验成绩:实验七网络程序设计综合实验摘要:本课程设计包含了文件传输协议的简单设计及实现。文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。文件传输协议的简单设计及实现建立在计算机网络实验环境TCP/IP网络体系结构之上,使用socket编程接口编写两个程序,分别为客户程序(CIientc)和服务器程序(server,c),利用了已有网络环境设
2、计并实现简单应用层协议。本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,调试过程中出现的问题及相应解决办法,实验运行结果,核心程序,个人体会及建议等。关键词:SOCKET编程,FTPc1ientZserver程序一.问题描述及设计思路1.1问题描述服务器端:1 .指定一个目录作为FTP目录(之后所有的文件操作均在此目录下进行)2 .接收客户端的命令请求并提供相应的服务。客户端:完成及FTP用户的人机界面,以命令的方式向服务器请求服务,主要的命令有:1.CoNNECTIP地址端口号2 .指定FTP服务器的IP地址和端口号,连接到服务器。响应:连接成功/失败。3 .1oGIN用户
3、名4 .用户登录(假设在服务器端有用户管理功能)5 .响应:若用户不存在,提示“无此用户”;若用户存在,提示“密码:”;用户输入密码后,若正确提示“登录成功”;若不成功,提示“密码错误”。6 .3.DIR7 .显示FTP服务器的FTP目录的文件列表(假设无子目录)8 .响应:目录列表(只要文件名即可)。9 .4.GET文件名10 .将FTP目录下的文件下载到本地,支持断点续传11 .响应:传送成功/失败/无此文件。12 .5.PIJT文件名13 .将本地文件上传到FTP目录,支持断点续传14 .响应:传送成功/失败/无此文件。15 .6.HE1P(客户端和服务器端均有该功能)16 .实验环境本
4、次实验采用MFC工程工程采用MFC对话框界面工程名称为MyServer和FTPSOCKETo17 .详细设计过程1.2设计思路1. FTP协议基础FTP是TCP/IP协议组中的协议之一,该协议是Internet文件传送的基础,它由一系列规格说明文档组成。目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上或从自己计算机中拷贝至远程计算机上。在TCP/IP协议中FTP标准命令TCP端口号为21,POrt方式数据端口为20。2. 网络文件传输原理在通信的时候主要可以分为两个部分
5、。一个部分是用于传送控制信息,例如发送文件的请求文件的名称、大小等。采用MFC所提供的CSoCket类的串行化技术来实现,而另一个部分就是文件的传输部分。对于文件的传输,由于数据量相对来说比较大,使用两个线程。一个用于发送,一个用于接收。这两个部分在具体实现的时候分别建立有自己的套接字。FTP编程基础3. FTP传输原理FTP协议使用两条单独的TCP连接一条专用于发送FTP命令另一条则专用于传递数据。初始建立连接时服务器在21号端口上接收来自客户端的命令连接。当需要传送数据时文件列表、文件数据等客户端向服务器发出POrt命令并进入监听状态等待来自服务器的数据连接请求。总体功能模块图服务器端线程
6、控制:线程类别:选择线程类别,单线程或多线程传送文件线程数设置:若选择多线程,可自行设置线程数目,若选择单线程,则默认线程数目为1启动服务器:设置好线程控制后,点击“启动”按钮启动服务器端选取文件:选择要发送给客户端的文件发送文件:获取要发送文件属性:获取到要传送给客户端的文件的基本属性,包括:文件名,大小(B),已发送多少(B),文件路径发送进度显示:显示给客户端发送文件的进度ChatWithSerVer:启动采用UDP协议的简单聊天系统,用来及客户端进行通讯(客户端和服务器端都得启动,否则无法收到)客户端功能说明:握手服务器:输入服务器端IP地址,点击“握手服务器”按钮,获取服务器端启动的
7、线程数连接服务器:及服务器进行连接接收文件:获取接收文件属性:获取到要接收的服务器端传来的文件的基本属性,包括:文件名,大小(B),已接收多少(B),文件存储路径接收进度显示:显示已接收文件的进度ChatWithServer:启动采用UDP协议的简单聊天系统,用来及客户端进行通讯(客户端和服务器端都得启动,否则无法收到)获取IP地址:获取本机的主机名及IP地址HE1P:显示客户端使用说明2、系统结构即时通讯文件传输流程图2、用例描述文件传送用例描述用例名称:服务器端文件传输参与者:服务器端管理员也潮:服务器端管理员设置线程类别和启动的线程数目,启动服务器,选取文件进行发送前置条件:服务器端管理
8、员已经运行服务器端程序基磕1 .服务器端管理员通过鼠标点击线程类别和线程数目下拉列表框进行设置,然后点击“启动”按钮,启动服务器.2 .点击“选取文件”按钮,选择要传送给客户端的文件,在文件属性框中显示出相应文件的信息,点击“发送文件”按钮,进行文件传输.3 .点击“退出”按钮,退出服务器端4 .点击“帮助”按钮可以查看使用说明5 .用例终止其他事件流A1:在按“发送.按钮之前,服务器端管理员随时可以按“退出”按钮,绪止与客户端的读接,即终止与客户端之间的文件传送。异常事件流:1.提示错误信息,文件传送失败用例名称:客户端文件传输参与者:客户也潮:客户输入服务器端IP地址,性接服务器,进行文件
9、接收前置条件:客户运行客户端应用程序基本事H1 .服务器端选择账户,点击开始服务,则进入监听状态,等待客户端请求.2 .客户端输入用户名及密码,若与服务器端匹配,则在文本框中显示连接服务器,登陆用户名.连接失败则显示“连接失败”.3 .在dient列表框中点击要上传的文件,弹出对话框,寻问是否要上传,点击是,则上传文档至服务器端.并将文档列表显示在列表框中。4 .点击终止服务,则退出程序.其他事件流A1:在按接收按钮之前,客户随时可以按“停止接收”按钮,终止与服务器端之间的文件传送.在文件开始接收后,点击“停止接收”按钮,也经止与服务器端之间的文件传送.异常事1.提示错误信息,文件传送失败二.
10、功能实现及主要代码服务器端启动服务,端口号为8888客户端连接服务,服务器的ip地址为111.9.118.115连接成功添加用户用户验证上传文件2.txt,上传到C盘刷新服务器,c盘中有2.txt,上传成功M)HrHrifc音东计算机本地老鱼(U)J下修(O)心1TEMP2014/5A22:06文件夹ATS1OG2013/4/411:01文件夹.Windows2014/5/1915:29文件夹1.XAmpp2013/1/1719:29文*陕3E3Sa专2014/4/813:13文件夹jSa文件央2014/5/516:55文件夹.用户2012/12/21307文件夹22014/5/211&22义
11、4仪档1KB1AJPG2014/4/721:SOJPG文件187KB添加文件下载文件文件下载到E盘J音乐1家庭追计算机足本地这量(G)J下载(O)JBS(E:)口个人何JWH(G:)一HPV220W0:)网箔j.uruxcmProgramFi1es4V4X4:4U2014/2/25218乂文件夹计m作僦2014/1/1012:45文彳:我.计算机网珞2013/11/2512:24文件夹密码学2013/11/3015:55文件突.软件测试2014/3/1513:54文件夹数字图像除再分析2014/4/621:43文4恢1网络程序设计2014/4/2620:47文件夹新建文件夹2013/3/111
12、7:20文件夹).由拟机2013/10/915:50文件夹一22014/5/2116:27义,义档IKB三实验总结通过这次实验,我很好的了解到了文件传输的流程,了解到文件传输协议使得主机间可以共享文件。FTP使用TCP生成一个虚拟连接用于控制信息,然后再生成一个单独的TCP连接用于数据传输。控制连接使用类似TE1NET协议在主机间交换命令和消息。文件传输协议是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。对套接字的使用和通信模
13、型通信机制有了进一步了解,也熟练的掌握了如何选择通信模型。对各个函数的使用也有了进一步了解。四附录代码:服务器初始化套接字BOO1CFTPServerD1g:InitSocket()(if(m_sock=INVA1ID_SOCKET)(m_sock=socket(AF_INET,SOCK_STREAM,0);)if(INVA1ID_SOCKET=m_sock)(MeSSageBOX(创建套接字失败!);)CStringsPort;GetD1gItem(IdcedITPORT)-GetWindowText(sPort);MessageBox(开启的端口:+SPort);intnPort=atoi
14、(sPort);if(nPort65535)(MeSSageBOX(端口号错误!);returnFA1SE;)SOCKADDR_INsrvAddr;srvAddr.sin_addr.S_un.Saddr=hton1(INADDRANY);srvAddr.sin_fami1y=AF_INET;srvAddr.sin_port=htons(nPort);if(bind(m_sock,(SOCKADDR*)&srvAddr,SiZeof(SOeKADDR):SOCKET_ERROR)(c1osesocket(m_sock);MeSSageBoX(绑定套接字失败!);returnFA1SE;)returnTRUE;)Fi1eInfofi1e10;intcount=O;CStringstr10;使用异步选择模型HCURSORCFTPServerD1g:OnQueryDragIcon()(return(HCURSOR)mh1con;)/启动服务/voidCFTPServerD1