linux文件传输项目文档
局域网文件传输系统项目说明
需求说明:
1,开发平台
linux x86 64
支持Debian Ubuntu
支持rhel,centos,Fedora
2,功能说明
文件上传与下载,讲指定文件上传到服务器,或从服务器下载文件到指定位置
文件浏览,浏览本地文件以及服务器端文件
概要
功能说明
客户端
主要任务:
分析用户输入的命令
根据命令向服务器端发出请求
等待服务器返回的结果 表1_1 命令含义与请求码
用户输入的命令命令含义对应的请求码get从服务器得到文件GETput向服务器传输文件PUTcd进入客户端的目录不需要与服务端通信,因此无请求!cd进入服务器端目录CDls列出客户端当前的内容不需要与服务端通信因此无请求!ls列出服务器端当前的内容LSconnect连接服务器发出连接请求,不需要服务器额外处理bye退出程序BYE 表1_2 命令的格式
命令的名称格式说明getget arg1 arg2。 arg1:源文件 arg2:本地路径。 arg1,arg2都是绝对路径putput arg1 arg1。arg1:本地文件 arg1:目标路径。 arg1 arg2都是绝对路径!cd!cd arg1。 arg1:指定的服务器目录。绝对路径!ls!ls arg1。 arg1:指定的目录。绝对路径connect connect arg1。 arg1:点分十进制IP地址cdcd arg1。 arg1:客户端的指定目录,绝对路径lsls arg1。 arg1:客户端指定目录,绝对路径byebye。
服务器端
主要任务
分析请求代码
根据请求代码做相应的处理
等待返回结果或者应答信息
表1_3请求码与相应处理
请求代码对应的处理GET向客户端传输文件PUT接受客户端的文件CD进入目录LS将当前目录内容传输给客户端BYE断开连接
通信协议与服务器模型:
本项目通信协议分两种
对于get命令和!ls命令这些需要传输文件内容的命令(!ls需要传输列出的目录文件列表),采用四次握手的通信协议
如图1_1所示 图1_1 四次握手通信协议
以get命令举例,get命令首先发出get请求,服务器程序接收到请求后,发送请求的文件长度或者错误应答码,接收到文件长度后客户端发送RDY应答信息,服务器端开始传输文件内容
对于!CD命令这种不需要传输文件内容的命令采取两次握手通信协议,如图1_2所示 图1_2 两次握手通信协议 本项目服务器采用多线程并发服务器模型,提供和客户端的交互。
3,源代码目录结构 Svr ├───common.h 总领整个服务器程序的头文件 ├───command.h 定义命令处理函数和初始化函数头文件 ├───command.c 定义命令处理函数和初始化函数 ├───main.c 定义程序主干函数 └───makefile Cli ├───common.h 总领整个服务器程序的头文件,常用文件皆放此 ├───command.h 定义命令处理函数和初始化函数头文件 ├───command.c 定义命令处理函数和初始化函数 ├───main.c 客户端主干函数. ├───input.c 定义命令分解函数,用于处理用户输入的命令 └───makefile
4,核心函数及数据结构定义 4.1 客户端 int do_connect char *ip, int *sock_fd ; 与服务器端进行连接 int do_get const char *src, const char *dst, int sock_fd ;从远端服务器下载文件 int do_put const char *src, const char *dst, int sock_fd ;向远端服务器上传文件 int do_cd char *path ;进入当前主机指定目录 int do_ls char *path ; 列出当前主机指定目录下的内容 int do_serv_cd char *path, int sock_fd ;进入远端服务器指定目录 int do_serv_ls char *path, int sock_fd ;列出当前服务器目录信息 int bye int sock_fd ;退出服务器,关闭连接 int split struct commamd_line, char line[] ;拆分命令相关函数
struct command_line char *name; 命令的名称 char *argv[MAX_ARG]; 命令携带的参数 ;
MAX_LINE 1024 向服务器端发送命令