计算机网络实验二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 日
云南师范大学教务处编印
实验一FTP服务器配置一实验目的1创建一个ftp服务器提供文件下载和上传功能2提供匿名登录功能用于下载公共文件但不能匿名上传3同时…
FTP服务器架构实验报告班级:10网工三班学生姓名:XX学号:XX实验目的和要求:1.创建一个ftp服务器,提供文件下载和上传功能…
实验报告课程名称计算机网络基础实验项目FTP服务器的配置专业班级0906603姓名学号27指导教师陈伟宏老师成绩日期20xx111…
FTP服务器架设实验日期姓名学号成绩教师一实验目的1掌握配置和管理Windows20xx服务器的FTP服务2掌握ServUFTP服…
计算机实用技术实验报告实验题目PTP服务器的搭建班级姓名蒋艳静学号指导教师黄务兰报告日期一实验内容简要描述1实习目标1理解FTP的…
实验一FTP服务器配置一实验目的1创建一个ftp服务器提供文件下载和上传功能2提供匿名登录功能用于下载公共文件但不能匿名上传3同时…
计算机实用技术实验报告实验题目PTP服务器的搭建班级姓名蒋艳静学号指导教师黄务兰报告日期一实验内容简要描述1实习目标1理解FTP的…
FTP服务器架设实验日期姓名学号成绩教师一实验目的1掌握配置和管理Windows20xx服务器的FTP服务2掌握ServUFTP服…
计算机科学与技术系实验报告课程名称计算机网络实验名称ftp服务器的搭建姓名王欢学号124077031045日期成绩教师左红卫一实验…
FTP服务器架构实验报告班级:10网工三班学生姓名:XX学号:XX实验目的和要求:1.创建一个ftp服务器,提供文件下载和上传功能…
网络程序设计实验报告实验名称基于FTP的文件传输系统实验类型设计型实验指导教师专业班级姓名学号电子邮件实验地点东9211实验日期2…