




免费预览已结束,剩余14页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
18沈阳理工大学课程设计专用纸目 录1 课程设计的目的和意义11.1设计目的11.2设计意义12 课程设计的内容和要求12.1设计的内容12.2设计要求13 课程设计的相关技术23.1实现软件23.2 tcp/ip协议技术23.3 tcp/ip协议与winsock网络编程接口23.4 winsock api的使用24 课程设计过程34.1设计思路34.2设计方案34.3系统的基本功能34.4客户端的主要工作流程44.5主要功能模块如下:54.4程序实现部分如下:104.5 程序运行结果截图155 课程设计小结18参考书目181 课程设计的目的和意义1.1设计目的文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是internet使用最广泛的协议之一。本程序设计主要学会学会利用已有网络环境设计并实现简单应用层协议,掌握tcp/ip 网络应用程序基本的设计方法和实现技巧,理解处于相同网络环境下的两个不相同的程序如何实现数据上传和下载,进一步理解服务器和客户端的工作原理及通信方法,在数据交互中掌握tcp/ip的体系结构,体会tcp的运输连接管理的三个阶段:建立连接、数据传送、释放连接。1.2设计意义文件传输协议是基于tcpip协议的一种标准机制下的应用层协议,负责将文件从一台计算机传输到另一台计算机上,并保证其传输的可靠性。要实现与两台计算机所处的位置,联系的方式以使用的操作系统无关,ftp的实现需要解决一下的问题:两个系统可能使用不同的文件名字约定,二个系统可能用不同的方表示文本和数据,二个系统可能有不同的目录结构。解决以上问题从而可以在各种不同网络之间进行文件传输。2 课程设计的内容和要求2.1设计的内容利用计算机具备windows环境中套接字socket 的编程接口功能,可为用户提供全网范围的进程通信功能。学会利用已有网络环境设计并实现简单应用层协议,掌握tcp/ip 网络应用程序基本的设计方法和实现技巧。用c+语言实现一个在相同网络环境下的两个不相同的程序如何实现数据上传和下载(实现不同计算机之间的文件传送)。2.2设计要求(1)将本地计算机上的一个或多个文件传送到远程计算机上(上传),或从远程计算机上获取一个或多个文件(下载)。传送文件实质上是将文件进行复制,然后上传到远程计 算机上,或者是下载到本地计算机上,对源文件不产生影响。(2)能够传送多种类型,多种结构,多种格式的文件。(文本文件,二进制文件,图像文件,声音文件,数据压缩文件)。此外,还可以选择文件的格式控制以及文件传送的模式等。用户可以根据通信双方所用的系统及要传送的文件确定在文件传输时选择哪一种文件结构。(3)提供对本地计算机和远程计算机的目录操作功能。3 课程设计的相关技术3.1实现软件操作系统:windows7(windows nt 以上版本皆可)编程环境:vc+6.0编程语言:c+测试环境:ms-dos3.2 tcp/ip协议技术在tcp/ip协议族中,有两个互不相同的传输协议:tcp(传输控制协议)和udp(用户数据报协议)。tcp为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面,udp则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。3.3 tcp/ip协议与winsock网络编程接口winsock规范不是一种网络协议,而是一套开放的、支持多种协议的windows写的网络编程接口。winsock可以访问很多种网络协议,可以把它当作一种协议的封装。现在的winsock已经基本上实现了与协议无关,可以使用winsock来调用协议的功能3.4 winsock api的使用下面给出了使用winsock进行编程时涉及的主要函数:wsastartup函数、wsacleanup函数、socket函数、closesocket函数、send函数、recv函数、bind函数、listen函数、accept函数、connect函数 4 课程设计过程4.1设计思路使用socket进行client/server程序设计的一般连接过程是这样的:server端listen(监听)某个端口是否有连接请求,client端向server端发出coonnect(连接)请求,server端向client端发回accept(接受)信息,一个连接就建立起来了。server端和client端都可以通过send,put,dir等方法与对方通信.1. 客户端指定要索取服务器端的哪个文件夹的内容,即在客户端将服务器端某个文件夹的路径发送给服务器端。2.服务器端解析这个字符串,遍历整个文件夹,将文件夹中的文件逐个传回到客户端。3.客户端逐个接收服务器端传来的文件,安放到指定的目录下。4.2设计方案1.服务器端调用socket的accept()方法,等待客户端联接。2.客户端发送需要从服务端获得的文件夹路径给服务器端。3.服务器端根据客户端发来的路径遍历整个路径下的文件及文件夹,并将需要传送到文件记录全路径记录到一个string类型的数组中,并将文件的个数发送给客户端。4.客户端接收服务器端发来的文件个数,并向服务器端发送关闭联接请求,并关闭客户端连接。5.服务器端收取关闭连接请求,将socket关闭,进入传输文件循环中。6.服务器端调用socket的accept()方法,等待客户端联接。7.客户端根据刚才取得的要传输的文件数,进行循环获取文件,记得每次取完文件要关闭socket连接,这样就不会将多个文件写入到同一个文件中。4.3系统的基本功能1.get:取远方的一个文件2.put:传给远方一个文件3.pwd:显示远主当前目录4.dir:列出远方当前目录5.cd :改变远方当前目录6.? :显示你提供的命令7.quit :退出返回4.4客户端的主要工作流程否开始输入连接的主机号dircd?pwdgetputquit选择显示总菜单列出远方当前目录显示远方当前目录改变远方当前目录取远方的一个文件传给远方一个文件显示结果继续是结束图4-1客户端的主要工作流程4.5主要功能模块如下:(1)帮助显示客户端主操作菜单void help() cout 欢迎进入迷你ftp帮助菜单 endl * * * * * * * * * * * * * * * * * * * * * endl *1.get.下载(接受)文件* endl *get的用法: get 文件名 * endl *2.put.上传(发送)文件* endl *put的用法:put 文件名 * endl *3.pwd.显示当前文件夹的绝对路径* endl *4.dir.显示远方当前目录的文件* endl *5.cd.改变远方当前目录和路径* endl *cd的用法(进入下级目录): cd 路径名 * endl *cd的用法(进入上级目录): cd . * endl *6.?或者help.进入帮助菜单* endl *7.quit.退出ftp* endl * * * * * * * * * * * * * * * * * * * * * endl;(2)各种处理命令代码void list(socket sockfd) int nread; while(true) nread=recv(sockclient,rbuff,1024,0);/recv函数通过sockclient套接口接受数据存入rbuff缓/冲区,返回接受到的字节数 if(nread=socket_error) printf(read response error!n); exit(1); if(nread=0)/数据读取结束 break; /显示数据 rbuffnread=0; printf(%s,rbuff); int sendfile(socket datatcps,file* file)/发送文件,处理put命令 printf( sending file data.); for(;) /从文件中循环读取数据并发送客户端 int r=fread(sbuff,1,1024,file);/fread函数从file文件读取1个1024长度的数据到sbuff,返/回成功读取的元素个数 if(send(datatcps,sbuff,r,0)=socket_error) printf(lost the connection to client!n); closesocket(datatcps); return 0; if(r1024)/文件传送结束 break; closesocket(datatcps); printf(donen); return 1;dword startsock()/启动winsockwsadata wsadata;char a20;memset(a,0,20);if(wsastartup(makeword(2,2),&wsadata)!=0)/加载winsock版本printf(sock init fail!n);return (-1);if(strncmp(inputip,a,20)=0)printf(请输入连接的主机ip:);scanf(%s,&inputip);/设置地址结构serveraddr.sin_family=af_inet;/af_inet表示使用ip地址族serveraddr.sin_addr.s_addr=inet_addr(inputip);/指定服务器ipserveraddr.sin_port=htons(recv_port);/设置端口号return(1);/创建套接字dword createsocket()sockclient=socket(af_inet,sock_stream,0);/当socket函数成功调用时返回一个新的socket(socket descriptor)if(sockclient=socket_error)printf(sockclient create fail! n);wsacleanup();return(-1);return(1);dword callserver() /发送连接请求createsocket();if (connect(sockclient,(struct sockaddr *)&serveraddr,sizeof(serveraddr)=socket_error)/connect函数创建与指定外部端口的/连接printf(connect fail n);memset(inputip,0,20);return(-1);return(1);dword tcpsend(char data)/发送命令int length;length=send(sockclient,data,strlen(data),0);/send函数通过sockclient接口发送data里面的/数据,发送成功返回发送的字节数if(length0) fwrite(rbuff,sizeof(rbuff),count,fd);/把count个数据长度为size0f()的数据从/rbuff输入到fd指向的目标文件 fclose(fd);/关闭文件/getif(strncmp(rbuff,put,3)=0)strcpy(filename,rbuff+9); fd2=fopen(filename,rb);/rb读写打开一个二进制文件,只允许读写数据。if(fd2)if(!sendfile(sockclient,fd2) printf(send failed!);return 0; fclose(fd2);/关闭文件else/打开文件失败 strcpy(sbuff,cant open file!n); if(send(sockclient,sbuff,1024,0) return 0;/putif(strncmp(rbuff,dir,3)=0)printf(n);list(sockclient);/列出接受到的列表内容/dirif(strncmp(rbuff,pwd,3)=0)list(sockclient);/列出接受到的内容-绝对路径if(strncmp(rbuff,cd,2)=0)/cdclosesocket(sockclient);/关闭连接wsacleanup();/释放winsockreturn main();/main4.4程序实现部分如下:客户端:#include winsock.h#include windows.h#include stdio.h#include time.h#include #define recv_port 3312#define send_port 4302#pragma comment(lib, wsock32.lib)socket sockclient;char filename20;/文件名sockaddr_in serveraddr;/服务器地址char rbuff1024;/接收缓冲区char sbuff1024;/发送缓冲区char inputip20;/存储输入的服务器ip/处理help命令void help() cout 欢迎进入迷你ftp帮助菜单 endl * * * * * * * * * * * * * * * * * * * * * endl *1.get.下载(接受)文件* endl *get的用法: get 文件名 * endl *2.put.上传(发送)文件* endl *put的用法:put 文件名 * endl *3.pwd.显示当前文件夹的绝对路径* endl *4.dir.显示远方当前目录的文件* endl *5.cd.改变远方当前目录和路径* endl *cd的用法(进入下级目录): cd 路径名 * endl *cd的用法(进入上级目录): cd . * endl *6.?或者help.进入帮助菜单* endl *7.quit.退出ftp* endl * * * * * * * * * * * * * * * * * * * * * endl;/处理dir命令void list(socket sockfd) int nread; while(true) nread=recv(sockclient,rbuff,1024,0);/recv函数通过sockclient套接口接受数据存入rbuff缓/冲区,返回接受到的字节数 if(nread=socket_error) printf(read response error!n); exit(1); if(nread=0)/数据读取结束 break; /显示数据 rbuffnread=0; printf(%s,rbuff); int sendfile(socket datatcps,file* file)/发送文件,处理put命令 printf( sending file data.); for(;) /从文件中循环读取数据并发送客户端 int r=fread(sbuff,1,1024,file);/fread函数从file文件读取1个1024长度的数据到sbuff,返/回成功读取的元素个数 if(send(datatcps,sbuff,r,0)=socket_error) printf(lost the connection to client!n); closesocket(datatcps); return 0; if(r1024)/文件传送结束 break; closesocket(datatcps); printf(donen); return 1;dword startsock()/启动winsockwsadata wsadata;char a20;memset(a,0,20);if(wsastartup(makeword(2,2),&wsadata)!=0)/加载winsock版本printf(sock init fail!n);return (-1);if(strncmp(inputip,a,20)=0)printf(请输入连接的主机ip:);scanf(%s,&inputip);/设置地址结构serveraddr.sin_family=af_inet;/af_inet表示使用ip地址族serveraddr.sin_addr.s_addr=inet_addr(inputip);/指定服务器ipserveraddr.sin_port=htons(recv_port);/设置端口号return(1);/创建套接字dword createsocket()sockclient=socket(af_inet,sock_stream,0);/当socket函数成功调用时返回一个新的socket(socket descriptor)if(sockclient=socket_error)printf(sockclient create fail! n);wsacleanup();return(-1);return(1);dword callserver() /发送连接请求createsocket();if (connect(sockclient,(struct sockaddr *)&serveraddr,sizeof(serveraddr)=socket_error)/connect函数创建与指定外部端口的/连接printf(connect fail n);memset(inputip,0,20);return(-1);return(1);dword tcpsend(char data)/发送命令int length;length=send(sockclient,data,strlen(data),0);/send函数通过sockclient接口发送data里面的/数据,发送成功返回发送的字节数if(length0) fwrite(rbuff,sizeof(rbuff),count,fd);/把count个数据长度为size0f()的数据从/rbuff输入到fd指向的目标文件 fclose(fd);/关闭文件/getif(strncmp(rbuff,put,3)=0)strcpy(filename,rbuff+9); fd2=fopen(filename,rb);/rb读写打开一个二进制文件,只允许读写数据。if(fd2)if(!sendfile(sockclient,fd2) printf(send failed!);return 0; fc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三年级下科学教学设计-磁铁有磁性-教科版
- 2024秋五年级英语上册 Unit 6 In a nature park Part B 第一课时教学设计 人教PEP
- Unit 6 Meet my family单元整体(教学设计)-2024-2025学年join in外研剑桥英语三年级上册
- 9那一定会很好(教案)-2024-2025学年语文三年级上册统编版
- 三年级信息技术上册 第2课 初识电脑教学设计 闽教版
- 20精彩极了“和”糟糕透了(教学设计)-2024-2025学年统编版语文五年级上册
- 物理压强知识总结
- 一年级品德与社会下册 我的身体教学设计 未来版
- 11《拆装玩具》教学设计-2024-2025学年人教鄂教版(2024)科学一年级上册
- Unit 8 Lesson 5 Grammar in Use教案 2024-2025学年仁爱科普版英语七年级下册
- 新建高中设计任务书
- 《军神》优课一等奖课件
- 环保设施运行管理制度环保设施运行管理规定
- 市场营销专业毕业论文浅谈xx企业的新产品开发策略
- 护理专升本历年考试真题及答案
- 会计信息系统用友ERP-U8V10.1高职PPT全套完整教学课件
- 山东金洲集团千岭矿业有限公司英格庄矿区矿山地质环境保护与土地复垦方案
- 河池港罗城港区牛毕作业区一期工程环评报告书
- 保安队长绩效考核细则
- SB/T 10482-2008预制肉类食品质量安全要求
- GB/T 4219-1996化工用硬聚氯乙烯(PVC-U)管材
评论
0/150
提交评论