1、课程设计题目Linux 下基于 Socket 的文件传输程序设计学院计算机学院专业计算机科学与技术年级2009 级已知参数和设计要求:要求:1、系统分为客户端和服务器端,客服端可以实现文件的上传、下载以及查看服务器 下默认目录的文件列表;服务器端可以对文件进行管理,包括上传,下载,删除文件,重命名等;2、在内核中添加一个自己的内存分配和释放的系统调用(可以调用malloc()和 free()等内存管理函数实现),并在程序中调用;3、支持多个客户端同时对服务器中的文件进行操作(多线程);加分项:1、实现了用户的权限管理;2、内存分配和释放用内存池实现;3、程序功能比较完善,如可以变更文件目录等;
2、学生应完成的工作:设计并实现。目前资料收集情况(含指定参考资料):Linux 内核设计与实现(第三版)课程设计的工作计划:任务下达日期 2012 年7 月 2 日完成日期2012 年7 月 5 日需求分析1.1 系统目的Linux 作为一个先进的操作系统,其发展越来越快,应用领域也越来越广泛。在学习了linux 内核设计与实现之后,亲自设计并实现 linux 下的编程,不仅有助于巩固学过的知识,更能扩宽自己的视野,增强动手实践能力。1.2 课程要求Linux 下基于 Socket 的文件传输程序设计,包括对文件进行管理,包括上传,下载,删除文件,重命名,支持多线程等。1.3 开发工具与开发平台
3、开发工具:C 语言开发平台:Linux 2 系统设计2.1 系统功能此软件的主要功能有:1. 实现在 linux 环境下的基于 socket 文件传输;2. 对 linux 环境下的文件进行简单管理。其中客户端与服务器的所要完成的具体功能如下: 客户端:(1) 连接服务器,并发送指令给服务器;(2) 接收并识别服务器发来的信息;(3) 通过不同指令实现文件的查看,下载,和上传。服务器:(1) 能查看本地的文件,并进行简单的管理,如删除,重命名等(2) 接收来自客户端的连接请求,并赋予客户端不同的操作权限;(3) 识别客户端的发来的指令,实现与客户端间的文件下载和上传。2.2 系统结构软件由服务
4、器端和客户端两部分组成,服务器端监听客户对某个特定端口的网络连接请求,并与之建立连接,这样,这个客户的数据就可以发送到服务器。客户端的任务是将用户的指令发送给服务器,且客户端可以有多个。客户端运行时将立即向服务器的某个端口发送连接请求,待连接建立后则由用户的发送线程发送该用户的指令到服务器。服务器端的主线程负责监听某个端口,接收用户的发送线程发出的指令。在客户端,用户接收线程接收服务器发送的数据,由用户端主线程进行处理后显示。2.3 客户端指令查看服务器下指定路径下的所有文件: look_up;下载服务器下指定路径下的指定文件:download filename; 上传客户端下指定路径下的指定
5、文件:senddatafilename; 退出连接: end ;2.4 服务器指令运行服务器后,系统提示指令查看所有文件请输入 1 ; 重命名文件请输入 2 ; 删除文件请输入 3; 开启服务监听模式 4;2.5 数据流设计3 测试结果服务器进行文件管理的操作服务器监听多个客户端并相应其指令客户端 0 连接服务器客户端 1 连接服务器4 总结这次课程设计是 linux 下的 socket 通信,以 c 为编程语言,并实现了文件管理与多线程开发。通过此次课程设计,进一步熟悉了linux 操作系统的使用,掌握了linux 下socket 通信的基本配置,加深了对所学知识的理解,更扩宽了自己的视野,
6、增强动了手实践能力。5 参考资料Linux 内核设计与实现第三版Robert Love 著6 附录代码主要服务器代码:void *get_client(void *sockfd)char bufBUFFER_SIZE; memset(buf,0,sizeof(buf);int read_size;/time_t timep;int limit;printf(有客户端接入! 请输入要授予 client %d 的权限n,maxi); printf(1 为 仅能查看服务器下的文件名n);printf(2 为 能查看服务器下的文件名与下载文件n);printf(3 为 能查看服务器下的文件名,上传文件
7、,下载文件n); scanf(%d,&limit);if(limit=1)strcpy(buf,1); else if(limit=2)strcpy(buf,2); else if(limit=3)strcpy(buf,3);elseprintf(输入错误,结束程序!);exit(0);send(int)sockfd,buf,strlen(buf)+1,0);/ 客户端权限控制domemset(buf,0,sizeof(buf); / 数组清零if(read_size=recv(int)sockfd,buf,BUFFER_SIZE, 0)=-1) perror(recv error.); ex
8、it(1);/接收数据if(!strcmp(buf, end)puts(客户端退出); break;else if(!strcmp(buf, look_up) memset(buf,0,sizeof(buf); dir =opendir(test_path);while(ptr = readdir(dir)!=NULL)if(strcmp(ptr-d_name, .)&strcmp(ptr-d_name, .)/ printf(d_name: %s%cn,ptr-d_name,ptr-d_type);/ 打印文件名,文件类型存入 buf 发送strcat(buf,ptr-d_name);str
9、cat(buf,);/文件名,文件类型closedir(dir); send(int)sockfd,buf,strlen(buf)+1,0);/ 相应客户端查看文件操作else if(!strncmp(download,buf,8)char test50;char test250;mid(test,buf,strlen(buf)-9,9);strcpy(test2,test_path);strcat(test2,test); from_fd = open(test2, O_RDONLY);/打开要发送的文件if(from_fdd_name, .)&strcmp(ptr-d_name, .) printf(d_name: %s%cn,ptr-d_name,ptr-d_type);/ 打印文件名,文件类型模式 4n);closedir(dir);puts(查看文件 1 ; 重命名文件 2 ;删除文件 3 ;开始进入服务else if(op=2)/ 重命名puts(输入要重命名的文件,以及更改后到名字:);charname_from20;charname_to20;char name_from_path50;char name_to_path50;scanf(%s,name_from); scanf(%s,n
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1