Llinux微型文件传输要点

上传人:鲁** 文档编号:513128640 上传时间:2022-09-27 格式:DOC 页数:38 大小:264.50KB
返回 下载 相关 举报
Llinux微型文件传输要点_第1页
第1页 / 共38页
Llinux微型文件传输要点_第2页
第2页 / 共38页
Llinux微型文件传输要点_第3页
第3页 / 共38页
Llinux微型文件传输要点_第4页
第4页 / 共38页
Llinux微型文件传输要点_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《Llinux微型文件传输要点》由会员分享,可在线阅读,更多相关《Llinux微型文件传输要点(38页珍藏版)》请在金锄头文库上搜索。

1、局域网文件传输系统项目说明需求说明:1, 开发平台1.1 linux x86 641.2 支持 Debian Ubuntu1.3 支持 rhel , centos , Fedora2, 功能说明1.1文件上传与下载,讲指定文件上传到服务器,抑从服务器下载文件到指定位置1.2文件浏览,浏览本地文件以及服务器端文件L3概要功能说明1.3.1客户端主要任务:1)分析用户输入的命令2)根据命令向服务器端发出请求3)等待服务器返回的结果表1 1命令含义与请求码用户输入的命令命令含义对应的请求码Get从服务器得到文件GETPut向服务器传输文件PUTCd进入客户端的目录不需要与服务端通信,因此无请求!cd

2、进入服务器端目录CDLs列出客户端当前的内容不需要与服务端通信因此无请求Ils列出服务器端当前的内容LSConn ect连接服务器:发出连接请求,不需要服务器额外处理Bye退出程序BYE表12命令的格式命令的名称格式说明getget argl arg2o argl:源文件 arg2 :本地路径。argl , arg2都是绝对路径putput argl arglo argl :本地文件argl:目标路径。argl arg2都是绝对路径!cd!cd argloargl:指定的服务器目录。绝对路径!ls!ls argloargl指定的目录。绝对路径conn ectconnect argloargl:

3、点分十进制IP地址cdcd argloargl:客户端的指定目录,绝对路径IsIs argloargl :客户端指定目录,绝对路径byebyeo1.3.2服务器端主要任务1)分析请求代码2)根据请求代码做相应的处理3)等待返回结果或者应答信息表13请求码与相应处理请求代码对应的处理GET向客户端传输文件PUT接受客户端的文件CD进入目录LS将当前目录内容传输给客户端BYE断开连接通信协议与服务器模型:本项目通信协议分两种对于get命令和! Is命令这些需要传输文件 内容的命令(! Is需要传输列出的目录文件列表),采用四次握手的通信协议如图1_1所示Server客户端命令ClientServe

4、r应答信息ClientServerRDY信息Client传输的文件内容ClientServer图1_1四次握手通信协议以get命令举例,get命令首先发出get请求,服务器程序接收到请求后,发送请求的文件长度或者错误应答码,接收到文件长度后客户端发送RDY应答信息,服务器端开始传输文件内容1 2所示对于!CD命令这种不需要传输文件内容的命令采取两次握手通信协议,如图客户端命令ServerClie nt命令执行是否成功ServerClie nt图1_2两次握手通信协议本项目服务器采用多线程并发服务器模型,提供和客户端的交互。3, 源代码目录结构SvrIcommon.h总领整个服务器程序的头文件I

5、command.h定义命令处理函数和初始化函数头文件Icommand.c定义命令处理函数和初始化函数Imain.c定义程序主干函数1makefileCliIcomm on .h总领整个服务器程序的头文件,常用通文件皆放与此Icommand.h定义命令处理函数和初始化函数头文件Icommand.c定义命令处理函数和初始化函数Imain.c客户端主干函数.Iinputc定义命令分解函数,用于处理用户输入的命令1makefile4, 核心函数及数据结构定义4.1客户端int do_co nn ect(char *ip, i nt *sock_fd);与服务器端进行连接int do_get(const

6、 char *srcz const char *dst, int sock_fd);从远端服务器下载文件int do_put(const char *srcz const char *dstz 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

7、(int sock_fd);退出服务器,关闭连接 int split(struct commamdine, char line);拆分命 令相关函数struct comma nd_li nechar *n ame;命令的名称char *argvMAX_ARG;命令携带的参数;1024向服务器端发送命令的最大长度PORT8000端口号COMMANDJJNE256用户输入客户端命令的最大长度MAX LENGTH64每个参数或命令的最大长度4.2服务器int do_get(const char *srcz const char *dstz int sock_fd);处理用户的 put 命令int d

8、o_put(const char *srcz const char *dst, int sock_fd);处理用户的 get 命令 int do_cd(char *path);处理用户的! cd 请求int do_ls(char *path);处理用户的! Is 请求ADDR_LEN 17点分十进制IP地址的长度,包括最后的结束符5, 客户端执行流程5.1输出提示信息5.2接受用户输入的命令5.3输入命令是否为空,为空则程序正常退出,非空则继续5.4输入命令是否为bye,是则程序正常退出,否则继续5.5处理用户输入的命令5.6输出提示信息,继续循环执行5.1 5.5的过程6, 服务器执行流程6

9、.1服务器启动6.2是否接收到一个连接,是则继续,否则等待6.3创建连接是否成功,是则继续,否则打印出错信息6.4创建一个子线程,是则继续,否则打印出错信息6.5接收客户端传输的命令6.6解析命令6.7重复6.26.6过程部分测试命令(取决于你放文件的位置,仅供参考):put /home/ubu ntu/L in ux_Ser_Cli/Clie nt/text/a.txt /home/ubu ntu/L in ux_Ser_CIi/Server/text put/home/ubu ntu/L inu x_Ser_Cli/Clie nt/text/user.txt /home/ub un tu/

10、Li nu x_Ser_Cli/Server/text get /home/ubuntu/Linux Ser Cli/Server/text/b.txt /home/ubuntu/Linux Ser Cli/Client/text源文件:客户端:/Clie nt commo n.h#pragma once#i nelude #i nelude #in elude comma nd.hH/Clie nt comma nd.h #pragma once #i nelude ncommo n.h1 #i nclude # nelude #i nelude # nelude #in elude #in

11、 elude ;-int do_c onn ect(char *ipz int *sock_fd); 器端进行连接/向服务#i nelude # nclude verrno .h/端口号用户输/每个参#defi ne MAX.LINE 1024 器端发送命令的最大长度#defi ne PORT8000命令的名称#defi ne COMMAND_LINE 256 入客户端命令的最大长度命令携带的参数#defi ne MAX.LENGTH 64 数或命令的最大长度#defi ne MAX.ARG 4 struct comma ndine _char *n ame;/char *argvMAX_AR

12、G; /int do_get(c onst char *src, const char *dst, int sock_fd);/ 端服务器下载文件一/与服务从远向远进入当列出当:一儿端服务器上传文件进入远列出当退出int do_cd(char *path); 前主机指定目录/服拆分获int do_ls(char *path); 前主机指定目录下的内容/int do_serv_cd(char *pathz int sock_fd); 端服务器指定目录/int do_servs(char *pathz int sock_fd); 前服务器目录信息/int split(struct comma nd

13、_| ine *com, char lin e); 命令相关函数一/char * path_alloc(size_t *sizep);存放完整路径的内存空间起始地址和大J/int in put();struct comma nd I ine comd:int argv;输入的参数个数/Clie nt comma nd.c#i nclude Hcommon .hint do_co nn ect(char *ipz i nt *sock_fd) /与服务器端进行连接in t res;sockle n_t len;char buflOO = ,M;struct sockaddrj n svraddGcliaddr;bzero(&cliaddr/sizeof(cliaddr);把一段内存区的内容全咅 8 设置为0*sock_fd = socket ( PFJNET, SOCK.STREAO);svraddr. sin_family = AFJNET;svraddr. sin_port= htons (1234);inet_pton (AFJNETJp , &(svraddr. sin_addr);res = connect (*s

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号