《计算机网络实验报告——ftp客服端服务器(共9页).doc》由会员分享,可在线阅读,更多相关《计算机网络实验报告——ftp客服端服务器(共9页).doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上计算机网络实验二ftp程序Pb 石晓龙一实验目的:增强对传输层协议TCP/UDP的理解理解C/S程序设计架构巩固Socket编程的能力锻炼分析网络应用中数据结构的能力和构建数据报文结构的能力二实验原理通过模仿FTP协议,利用基于TCP或者基于UDP的Socket,实现客户端与服务端的请求响应和数据传输。服务端接收客户端发出的请求命令后做出响应,完成上传下载及其他文件操作功能。三ftp工作流程1)服务端启动,等待用户连接2)客户端启动,请求与服务端连接3)服务端应答,与用户建立连接4)用户输入目录操作、文件上传下载等指令,服务端接收到指令后进行解析,作出相应的响应5)重
2、复(4)的过程,直至用户输入bye指令要求离开,服务结束实验内容分别完成客户端和服务端的设计,可选择完成以下功能(红色标记为必做部分):n put 将本地文件上传到服务端n get 从服务端下载文件到本地n cd 切换服务端目录n mkdir 在服务端创建新的目录n rmdir 删除服务端已存在的目录dir 显示服务端当前目录下的文件四程序模型 本程序采用TCP协议程序分为两部分,分别为CLIENT和SERVER部分,程序包含以下核心部分:SERVER:DWORD ConnectProcess();/用来控制命令执行过程,把每条指令分配到对应的函数去执行DWORD CreateSocket()
3、;/创建socketDWORD StartSock();/初始化函数void HandleError(char *func);/用来判断正误int Deletefile(SOCKET newsocket);/删除文件int Makefile(SOCKET newsocket);/添加文件int SendFile(SOCKET datatcps,FILE* file);/发送文件int SendFileList(SOCKET datatcps);/发送文件列表int SendFileRecord(SOCKET datatcps,WIN32_FIND_DATA *pfd);/发送文件记录CLIEN
4、T:DWORD StartSock();开始运行DWORD TCPSend(char data) ; /发送命令DWORD CallServer() ; /发送连接请求DWORD CreateSocket();/创建socketvoid list(SOCKET sock);创建列表void help();print help列表int Makedir(SOCKET sClient,char pathname20); /创建新文件int Deletedir(SOCKET sClient,char name20);/删除指令int SendFile(SOCKET datatcps,FILE* fi
5、le);/发送文件int _mkdir (const char *dirname ) ;/创建文件int _rmdir (const char *dirname ); /当前文件夹int _chdir (const char *dirname );/删除文件夹以上为两部分程序用到的一些函数这个程序是基于面向连接的TCP协议,也就是说先通过connect函数建立连接,然后向对方发送连接的确认,再向server端发送收到确认的确认。随后server和client之间发送信息,发送完毕后断开连接。服务器端与客户端分开设计,服务器端包含了对各种命令的响应,比如put,get,cd,makdir,rmd
6、ir等并且设置一个无限的while循环,直到客户输入bye之后才结束循环。客户端包含了人机交互过程,就是将人输入的指令发送给服务器端,之后等待服务器端执行命令。五源代码:见Client.cpp和Server.Cpp六框架图七运行结果截图1.Help指令 2.Dir指令 3.Cd指令 上图为用cd指令打开D:Media上图读取Media中的记录4.Get指令Get之前目录下没有a.txt, get之后出现a.txt.5.Put指令6.mkdir指令创建n文件夹创建前创建后创建后出现n文件夹7.rmdir指令执行rmdir指令,首先显示当前目录,存在一个空文件夹n,接下来进行删除删除前删除后删除成
7、功八实验心得体会 这是有一个网络编程实验,不得不说,对于网络编程真的一塌糊涂,首先它过多的库函数给我们带来了极大的困扰;其次,平时学的都只是空洞洞的协议,而一到真刀实战的时候往往显得准备不足。在做这个实验的时候遇到了如下的困难:一 刚开始的时候,对于get指令企图直接发送数据,忘记了TCP协议中发送的是socket,导致无论如何都得不出结果,后来认真研究过tcp之后,才豁然开朗,可见平时学习的不够扎实。二 一开始打算把所有指令都用相同的方式处理,但后来发现对于目录下的操作(dir mkdir rmdir),与其它指令的处理并不完全相同,须先对其缓冲区的数组进行处理。三 在server中一开始始终无法创建文件,后发现原来参数传递中,传递了错误的socket,本应适用接受后的sock,但是由于对程序理解的混淆,导致传递有误,其实这只是很小的一个错误,我列出这个错误的目的在于告诉自己应该细心,这种错误是不该犯的,而我却经常出现此类错误,白白浪费了很多时间。其实实验中遇到的问题还有很多,这里不能一一枚举,说了一些时刻来警示自己,希望下次有所进步。专心-专注-专业
限制150内