计算机网络实验报告——ftp客服端服务器

计算机网络实验二ftp程序

                                                                      Pb08210210  石晓龙

一.实验目的

增强对传输层协议TCP/UDP的理解

理解C/S程序设计架构

巩固Socket编程的能力

锻炼分析网络应用中数据结构的能力和构建数据报文结构的能力

二.实验原理

通过模仿FTP协议,利用基于TCP或者基于UDP的Socket,实现客户端与服务端的请求响应和数据传输。服务端接收客户端发出的请求命令后做出响应,完成上传下载及其他文件操作功能。

三.ftp工作流程

1)服务端启动,等待用户连接

2)客户端启动,请求与服务端连接

3)服务端应答,与用户建立连接

4)用户输入目录操作、文件上传下载等指令,服务端接收到指令后进行解析,作出相应的响应

5)重复(4)的过程,直至用户输入bye指令要求离开,服务结束

实验内容

分别完成客户端和服务端的设计,可选择完成以下功能(红色标记为必做部分):

n  put        将本地文件上传到服务端

n  get        从服务端下载文件到本地

n  cd         切换服务端目录

n  mkdir      在服务端创建新的目录

n  rmdir      删除服务端已存在的目录

dir        显示服务端当前目录下的文件

四.程序模型

   本程序采用TCP协议程序分为两部分,分别为CLIENT和SERVER部分,程序包含以下核心部分:

SERVER:

DWORD ConnectProcess();//用来控制命令执行过程,把每条指令分配到对应的函数去执行

DWORD CreateSocket();//创建socket

DWORD 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);//发送文件记录

CLIENT:

DWORD StartSock();开始运行

DWORD TCPSend(char data[]) ;       //发送命令

DWORD CallServer() ;   //发送连接请求

DWORD CreateSocket();//创建socket

void list(SOCKET sock);创建列表

void help();print  help列表

int Makedir(SOCKET sClient,char pathname[20]); //创建新文件

int Deletedir(SOCKET sClient,char name[20]);//删除指令

int SendFile(SOCKET datatcps,FILE* file);//发送文件

int  _mkdir (const char *dirname ) ;//创建文件

int  _rmdir (const char *dirname ); //当前文件夹

int  _chdir (const char *dirname );//删除文件夹

以上为两部分程序用到的一些函数

这个程序是基于面向连接的TCP协议,也就是说先通过connect函数建立连接,然后向对方发送连接的确认,再向server端发送收到确认的确认。

随后server和client之间发送信息,发送完毕后断开连接。

服务器端与客户端分开设计,服务器端包含了对各种命令的响应,比如put,get,cd,makdir,rmdir等并且设置一个无限的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,接下来进行删除

删除前

删除后

删除成功

八.实验心得体会

 这是有一个网络编程实验,不得不说,对于网络编程真的一塌糊涂,首先它过多的库函数给我们带来了极大的困扰;其次,平时学的都只是空洞洞的协议,而一到真刀实战的时候往往显得准备不足。在做这个实验的时候遇到了如下的困难:

一.            刚开始的时候,对于get指令企图直接发送数据,忘记了TCP协议中发送的是socket,导致无论如何都得不出结果,后来认真研究过tcp之后,才豁然开朗,可见平时学习的不够扎实。

二.            一开始打算把所有指令都用相同的方式处理,但后来发现对于目录下的操作(dir mkdir rmdir),与其它指令的处理并不完全相同,须先对其缓冲区的数组进行处理。

三.            在server中一开始始终无法创建文件,后发现原来参数传递中,传递了错误的socket,本应适用接受后的sock,但是由于对程序理解的混淆,导致传递有误,其实这只是很小的一个错误,我列出这个错误的目的在于告诉自己应该细心,这种错误是不该犯的,而我却经常出现此类错误,白白浪费了很多时间。

其实实验中遇到的问题还有很多,这里不能一一枚举,说了一些时刻来警示自己,希望下次有所进步。

 

第二篇:计算机网络服务器实验报告

 

     


本科学生综合性实验报告

小组成员:

姓名①   专业、班级  计科·12A  

姓名②   专业、班级  计科·12B   

姓名③   专业、班级  计科·12C   

学院       信息学院           年级:   20##             

实验课程名称                     

教师及职称         

        开课学期  20##    2015   学年       学期

            填报时间  2014           10     30    

云南师范大学教务处编印

相关推荐