ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:726.48KB ,
资源ID:24541145      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24541145.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验七网络程序设计综合实验DOC.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

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

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

3、定FTP服务器的IP地址和端口号,连接到服务器。 响应:连接成功/失败。 3LOGIN用户名 4 用户登录(假设在服务器端有用户管理功能) 5响应:若用户不存在,提示“无此用户”;若用户存在,提示“密码:”; 用户输入密码后,若正确提示“登录成功”;若不成功,提示“密码错误”。63DIR 7显示FTP服务器的FTP目录的文件列表(假设无子目录) 8响应:目录列表(只要文件名即可)。 94GET文件名 10 将FTP目录下的文件下载到本地,支持断点续传 11 响应:传送成功/失败/无此文件。 12 5PUT文件名 13 将本地文件上传到FTP目录,支持断点续传 14 响应:传送成功/失败/无此文

4、件。 15 6HELP(客户端和服务器端均有该功能) 16实验环境 本次实验采用MFC工程 工程采用MFC对话框界面 工程名称为MyServer和FTPSOCKET。 17 详细设计过程1.2 设计思路 1. FTP协议基础 FTP 是 TCP/IP 协议组中的协议之一,该协议是Internet文件传送的基础,它由一系列规格说明文档组成。目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上或从自己计算机中拷贝至远程计算机上。在TCP/IP协议中FTP标准命令TCP端口号为2

5、1,Port方式数据端口为20。2. 网络文件传输原理 在通信的时候主要可以分为两个部分。一个部分是用于传送控制信息,例如发送文件的请求文件的名称、大小等。采用MFC所提供的CSocket类的串行化技术来实现,而另一个部分就是文件的传输部分。对于文件的传输,由于数据量相对来说比较大,使用两个线程。一个用于发送,一个用于接收。这两个部分在具体实现的时候分别建立有自己的套接字。FTP编程基础 3. FTP传输原理 FTP协议使用两条单独的TCP连接 一条专用于发送FTP命令 另一条则专用于传递数据。初始建立连接时 服务器在21号端口上接收来自客户端的命令连接。当需要传送数据时 文件列表、文件数据等

6、 客户端向服务器发出Port命令 并进入监听状态 等待来自服务器的数据连接请求。总体功能模块图 服务器端 功能说明: 线程控制:线程类别:选择线程类别,单线程或多线程传送文件 线程数设置:若选择多线程,可自行设置线程数目, 若选择单线程,则默认线程数目为1 启动服务器:设置好线程控制后,点击“启动”按钮启动服务器端 选取文件:选择要发送给客户端的文件 发送文件:获取要发送文件属性:获取到要传送给客户端的文件的基本属性,包括:文件名,大小(B),已发送多少(B),文件路径发送进度显示:显示给客户端发送文件的进度 ChatWithServer:启动采用UDP协议的简单聊天系统,用来与客户端进行通讯

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

8、图 (1)文件传输流程图 2、用例描述(1)文件传送用例描述 二功能实现及主要代码服务器端启动服务,端口号为8888客户端连接服务,服务器的ip地址为111.9.118.115连接成功添加用户用户验证上传文件2.txt,上传到C盘刷新服务器,c盘中有2.txt,上传成功添加文件下载文件文件下载到E盘三 实验总结 通过这次实验,我很好的了解到了文件传输的流程,了解到文件传输协议使得主机间可以共享文件。 FTP 使用TCP生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输。控制连接使用类似TELNET协议在主机间交换命令和消息。文件传输协议是TCP/IP网络上两台计算机传

9、送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。对套接字的使用和通信模型通信机制有了进一步了解,也熟练的掌握了如何选择通信模型。对各个函数的使用也有了进一步了解。四 附录代码:服务器 初始化套接字BOOL CFTPServerDlg:InitSocket() if(m_sock = INVALID_SOCKET) m_sock = socket(AF_INET,SOCK_STREAM ,0); if(INVALID_SOCKET = m_sock) Mess

10、ageBox(创建套接字失败!); return FALSE; CString sPort; GetDlgItem(IDC_EDIT_PORT)-GetWindowText(sPort); MessageBox(开启的端口:+sPort); int nPort = atoi(sPort); if(nPort 65535) MessageBox(端口号错误!); return FALSE; SOCKADDR_IN srvAddr; srvAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); srvAddr.sin_family = AF_INET; srv

11、Addr.sin_port = htons(nPort); if(bind(m_sock,(SOCKADDR*)&srvAddr,sizeof(SOCKADDR)= SOCKET_ERROR) closesocket(m_sock); MessageBox(绑定套接字失败!); return FALSE; return TRUE;FileInfo file10;int count = 0;CString str10;使用异步选择模型HCURSOR CFTPServerDlg:OnQueryDragIcon() return (HCURSOR) m_hIcon;/-启动服务-/void CFTP

12、ServerDlg:OnStart() /进入监听状态 InitSocket(); / 设置socket为窗口通知消息类型 / 进入监听模式 int m_nClient = listen(m_sock,5); if(m_nClient != 0) MessageBox(Listen error!); closesocket(m_sock); return ; / MessageBox(Listen success!); /注册网络注册网络异步事件,m_hWnd为应用程序的主对话框或主窗口的句柄 if(:WSAAsyncSelect(m_sock, m_hWnd, WM_SOCKET, FD_A

13、CCEPT|FD_CLOSE|FD_READ|FD_WRITE)=SOCKET_ERROR) MessageBox(WSAAsyncSelect fail!); else MessageBox(WSAAsyncSelect success!); 客户端 连接服务void CFTPClientDlg:OnConnect() /先获得IP控件的值 BYTE nField0,nField1,nField2,nField3; m_IP.GetAddress(nField0, nField1,nField2, nField3); char buff20; wsprintf(buff,%d.%d.%d.%

14、d,nField0,nField1,nField2,nField3); MessageBox(buff); /获取端口号的值 int port = atoi(m_port); m_sock = socket(AF_INET,SOCK_STREAM ,0); if(INVALID_SOCKET = m_sock) / MessageBox(创建套接字失败!); return ; / else / MessageBox(创建套接字成功!); SOCKADDR_IN srvAddr; srvAddr.sin_addr.S_un.S_addr = inet_addr(buff); srvAddr.si

15、n_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();上传文件/-上传文件到服务器-/void CFTPClientDlg:OnPutFile() /* if(!UserVerfify() MessageBox(该用户不存在

16、); return ; */ CFileDialog fileDlg(TRUE,NULL,NULL); if(fileDlg.DoModal() = IDCANCEL) return; CString fileName,filePath; /文件名 文件路径 CString fileType; /文件类型 int fileLength; filePath = fileDlg.GetPathName(); CFile newFile; newFile.Open(filePath, CFile:modeRead|CFile:modeReadWrite ); /获取文件的名字,大小,路径 fileN

17、ame = newFile.GetFileName(); fileName += #; /为了区别文件名和传输的内容 fileLength = newFile.GetLength(); / char *pbuf = new char1024; /pbuf存储文件内容/ memset(pbuf,0,1024); char *pbuf = new charMAXSIZE; /pbuf存储文件内容 memset(pbuf,0,MAXSIZE);/ char pbuf1024 = 0; / UINT nBytesRead = newFile.Read( pbuf, fileLength); UINT

18、nBytesRead = newFile.Read( pbuf, MAXSIZE); /-用数字1表示上传文件名的识别码-/ fileName = 1 + fileName; CString pbuf1; pbuf1.Format(pbuf); fileName = 1 + fileName + pbuf; / char* fName1 = (LPSTR)(LPCTSTR)fileName;/ strcat(fName1,pbuf);/此语句有问题/ MessageBox(fileName);/ MessageBox(fName1); newFile.Close(); if(nBytesRea

19、d 0) / if(send(m_sock,fName1,strlen(fName1)+1,0)=SOCKET_ERROR ) if(send(m_sock,fileName,strlen(fileName)+1,0)=SOCKET_ERROR ) return; 下载文件列表 void CFTPClientDlg:OnDblclkFileList(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code here int m_count = m_fileList.GetItemCou

20、nt(); if(m_count GetWindowText(user); user = 4 + user; char* p = (LPSTR)(LPCTSTR)user; MessageBox(user); if(send(m_sock,p,1024,0) =SOCKET_ERROR) MessageBox(发送失败); return ; char u1024 = 0; if(recv(m_sock,u,1024,0) = SOCKET_ERROR) MessageBox(接受数据失败); return ; MessageBox(u); if( u0 = T) MessageBox(用户验证成功); if( u0 = F) MessageBox(用户验证失败); m_sock = INVALID_SOCKET;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1