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

下载本文档

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

文档简介

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

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

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

4、实验环境 本次实验采用MFC工程 工程采用MFC对话框界面 工程名称为 MyServer 和。17. 详细设计过程1.2设计思路1. FTP协议基础FTP是TCP/IP协议组中的协议之一,该协议是In ternet文件传送的基础,它由一系列规格说明文档组成。目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,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协议的简单聊天系统,用来与客户端进行通 讯(客户端和服务器端都得启动,否则无法收到) Help :显示服务器端使用

7、说明 客户端/收文件握手服接收文Eever连接服頑取I? 地址HELP接收逬功能说明:握手服务器:输入服务器端IP地址,点击“握手服务器”按钮,获取服务器端 启动的线程数 连接服务器:与服务器进行连接 接收文件:获取接收文件属性:获取到要接收的服务器端传来的文件的基本 属性,包括:文件名,大小(B),已接收多少(B),文件存储路径接收进度显示: 显示已接收文件的进度 ChatWithServer :启动采用UDP协议的简单聊天系统,用来与客户端进行通 讯(客户端和服务器端都得启动,否则无法收到) 获取IP地址:获取本机的主机名及IP地址 HELP:显示客户端使用说明2、系统结构即旳迪讯3、主要

8、功能流程图(1)文件传输流程图2、用例描述(1)文件传送用例描述用例名称:匪务器曲文件楼输振务器端管理员设宣境程英别和启功的城瞳敢目.启功脈券雄,选取文I牛进行发送前薛件,腥务匝端管理员己坯运汙腥爵器端臣序1.服务翠端管理吕通过哉标点击姥屋粪别和娃程锁目弋拉列袅框遊行设宣,然卷点.击*启动”捜琨 启动弱务器.丄点出“选取文件"搜齟,选择鑒传泾给容户端的丈嘩,在文件凰性框申显示出柏应丈件的倍息, 点击“发迸文件=按祀.进行文件臓.头点去“退出”按钮,退出尿势器皓4. 塩击欄帮助授袒可以宣看朋月说明5. 用例终Lt苴他李絆盍IL在搜,发送求超之前脈务樹管理罚随时可限搜£退1/枚

9、社,钩止与客户嫌的诞按味终止与客 户端之间的文件俸送.舁蓉MS:1.處示错淇信息,文件借送失散用洌名称:客尸嚅文件传输塞与若專F蓉户输入服势器站ip地th键搀膿勞岳逬行文件搀收前貢笔件土客户运行客户端应用淫序I 険务器端说择底户,点疋开始fi艮务,则迓人医听杭态*等待客二端请求°:.客.=端输入曲户名&那若三展哥器端匹配別衽文加框口五连檳服务器.壁礙户名.述 按尖败则显示“连接失败妙3.枉口址列去框屮点士要上传的冥件,弹出灼话征寻1可是否要上4点七是,口上传又档至隈 爹誥喘.幵将咒档列盍辰示在列盍眶中.4 悬主疾止服务*则退出程睜碁他事杵眾盟;性按“捲收拶钮Z自齐客户曜划可以

10、嫂停止揍收平捷超终止与肢夯器端北间的袞件件滋 在文件开始播收后,点击“停止播收"哽迅也线lz与脈务誥端之闾的又件传送,异常事件冷;1.現示错溟信恳.文件传遥那二功能实现及主要代码服务器端启动服务,端口号为8888客户端连接服务,服务器的ip地址为连接成功添加用户用户验证上传文件2.txt,上传到C盘刷新服务器,c盘中有2.txt,上传成功a iDwT*,*占 TSLOGaG14/5i/5 22=062011/4/d llrOlSW3EIA#罢15014/5/19 1 空押0圧* »mpp2QU/1/17 金295014/4/8 13=1*计初2014/5/5 16=55益彌

11、鬆(C:|J !=2O12/1J/2 L3<)7-下BO)2014/5/211*12丄河.1.苫空土曲 AJPC2D14W? 2LS018 7 K.B 亠 |添加文件下载文件文件下载到E盘lit luxuryrogrjim Fi|#(20M/2Z25 2LOB衣件夹计2Olfl/lZ1012 4S2013/11/7520J2/L1/30 丄毁注2014/J/151351找圭至略瞎2沽忻2OU/4/6 21W33.a T& 4S?培将戸诠计2014/4/2& 2tt47左件耒轩X)l3/Vll 17;?0Jll dtiKtlfl2O13/W/9 15:50新誉H心|0>

12、;14/5/211427_ HP V220W (Jr)三实验总结通过这次实验,我很好的了解到了文件传输的流程,了解到文件传输协议使 得主机间可以共享文件。FTP使用TCP生成一个虚拟连接用于控制信息,然后 再生成一个单独的TCP连接用于数据传输。控制连接使用类似TELNET协议在主 机间交换命令和消息。文件传输协议是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNE上最早使用的协议之一,它属于网络协议 组的应用层。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或 改变服务器上的目录。对套接字的使用和通信模型通信机制有了进一步了解,也 熟练的掌握了

13、如何选择通信模型。对各个函数的使用也有了进一步了解。四附录代码:服务器初始化套接字BOOL C()if(m_sock = INVALID_SOCKET)m_sock = socket(AF_INET,SOCK_STREAM ,0);if(INVALID_SOCKET = m_sock)MessageBox("创建套接字失败!");return FALSE;CStri ng sPort;GetDlgltem(IDC_EDIT_PORT)->GetWi ndowText(sPort);MessageBox("开启的端口 :"+sPort);int n

14、Port = atoi(sPort);if(nPort < 1 | nPort > 65535)MessageBox(" 端口号错误! "); return FALSE;SOCKADDR_IN srvAddr; 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_ER

15、ROR) closesocket(m_sock);MessageBox(" 绑定套接字失败 !");return FALSE;return TRUE;int count = 0;CString str10;使用异步选择模型HCURSOR C()return (HCURSOR) m_hIcon;/ 启动服务 /void C()/ 进入监听状态 InitSocket();/ 设置 socket 为窗口通知消息类型/ 进入监听模式int m_nClient = listen(m_sock,5); if(m_nClient != 0)MessageBox("Listen

16、error!"); closesocket(m_sock); return ;/ MessageBox("Listen success!");II注册网络注册网络异步事件,m_hWnd为应用程序的主对话框或主窗口的句柄if(:WSAAsyncSelect(m_sock, m_hWnd, WM_SOCKET,FD_ACCEPT|FD_CLOSE|FD_READ|FD_WRITE)=SOCKET_ERROR) MessageBox("WSAAsyncSelect fail!");else MessageBox("WSAAsyncSelec

17、t success!"); 客户端 连接服务void C()II 先获得 IP 控件的值BYTE nField0,nField1,nField2,nField3; m_IP.GetAddress(nField0, nField1,nField2, nField3); char buff20;wsprintf(buff,"%d.%d.%d.%d",nField0,nField1,nField2,nField3); MessageBox(buff);II 获取端口号的值int port = atoi(m_port); m_sock = socket(AF_INET,S

18、OCK_STREAM ,0); if(INVALID_SOCKET = m_sock)IIMessageBox(" 创建套接字失败 !");return ;II elseIIMessageBox(" 创建套接字成功 !");SOCKADDR_IN srvAddr;srvAddr.sin_addr.S_un.S_addr = inet_addr(buff); srvAddr.sin_family = AF_INET;srvAddr.sin_port = htons(port);II srvAddr.sin_port = htons(8888); if(:c

19、onnect(m_sock, (sockaddr*)&srvAddr, sizeof(srvAddr) = -1) MessageBox(" 连接失败 ");return ;else MessageBox(" 连接服务器成功 ");UpdateList(); 上传文件/上传文件到服务器 /void C()/* if(!UserVerfify()MessageBox(" 该用户不存在 "); return ;*/C (TRUE,NULL,NULL);if() = IDCANCEL)return;CString ; /CStrin

20、g ; / int ;文件名 文件路径文件类型= ();C;new(, C );/ 获取文件的名字,大小,路径= new();+= "#" /= new();/char *pbuf = new char1024;/pbuf/memset(pbuf,0,1024);char *pbuf = new charMAXSIZE;/pbufmemset(pbuf,0,MAXSIZE);/ char pbuf1024 = 0;/ UINT nBytesRead = new( pbuf, );UINT nBytesRead = new( pbuf, MAXSIZE);为了区别文件名和传输

21、的内容存储文件内容存储文件内容/ 用数字 1 表示上传文件名的识别码 / = "1" + ;CString pbuf1; pbuf1.Format(pbuf); = "1" + + pbuf;/ char* fName1 = (LPSTR)(LPCTSTR);/ strcat(fName1,pbuf);/此语句有问题/ MessageBox();/ MessageBox(fName1); new();if(nBytesRead >0)/ if(send(m_sock,fName1,strlen(fName1)+1,0)=SOCKET_ERROR ) if(send(m_sock,()+1,0)=SOCKET_ERROR )return; 下载文件列表 void C(NMHDR* pNMHDR, LRESULT*

温馨提示

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

评论

0/150

提交评论