ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:432.73KB ,
资源ID:10393802      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10393802.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Linux课程设计.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Linux课程设计.docx

1、Linux课程设计重庆大学课程设计报告课程设计题目:Linux下基于socket的文件传输程序设计 学 院: 计算机学院 专业班级: 网络工程一班 年 级: 姓 名: 学 号: 完成时间: 2012 年 06 月 22 日成 绩: 指导教师: 重庆大学教务处制课程设计指导教师评定成绩表项目分值优秀(100x90)良好(90x80)中等(80x70)及格(70x60)不及格(x60)评分参考标准参考标准参考标准参考标准参考标准学习态度15学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务学习态度尚好,遵守组

2、织纪律,基本保证设计时间,按期完成各项工作学习态度尚可,能遵守组织纪律,能按期完成任务学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度技术水平与实际能力25设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信设计基本合理,理论分析与计算无大错,实验数据无大错设计

3、不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题创新10有重大改进或独特见解,有一定实用价值有较大改进或新颖的见解,实用性尚可有一定改进或新的见解有一定见解观念陈旧论文(计算书、图纸)撰写质量50结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰结构基本合理,逻辑基本清楚,文字尚通顺,勉

4、强达到规范化要求;图纸比较工整内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰指导教师评定成绩:指导教师签名: 年 月 日重庆大学本科学生课程设计任务书课程设计题目Linux下基于socket的文件传输程序设计学院计算机学院专业网络工程年级2009级已知参数和设计要求:系统分为客户端和服务器端,客服端可以实现文件的上传、下载以及查看服务器下默认目录的文件列表;服务器端可以对文件进行管理,包括上传,下载,删除文件,重命名等;学生应完成的工作: 1、编程实现上述功能。 2、在内核中添加一个自己的内存分配和释放的系统调用(可以调用malloc()和free()等内存

5、管理函数实现),并在程序中调用; 3、支持多个客户端同时对服务器中的文件进行操作(多线程);加分项:1、实现了用户的权限管理 2、内存分配和释放用内存池实现; 3、程序功能比较完善,如可以变更文件目录等;目前资料收集情况(含指定参考资料):1美Robert Love著_陈莉君 康华译_Linux 内核设计与实现_机械工业出版社_2011.62美 DanielP. Bovet著_陈莉群 冯锐 牛欣源 译_深入理解LINUX内核_中国电力出版社_2008课程设计的工作计划:第一天:讨论系统实现过程,并完成服务器与客户端通讯问题,主要解决了服务器端功能。第二天:完成了客户端功能和实现了多线程。第三天

6、:完成了用户权限管理以及变更文件目录等。第四天:检查成果。第五天:完成课程设计报告。任务下达日期 2012 年 06 月 18 日完成日期 2012 年 06月 22 日计算机Linux课程设计报告书 文件传输系统目录 引言 2 总体设计 22.1总体设计概念 22.2系统架构 22.3 模块划分 2 详细设计 33.1软件层次模型 33.2流程图 4 编程及运行结果 54.1服务器端设计与编码 54.2客户端设计与编码 12 课程设计总结与体会23 参考文献24 引言 随着我们的生活与计算机越来越紧密的结合起来,计算机可以取代生活中很多的事情。最简单的,计算机的文件传输就可以避免远距离纸质文

7、件传输带来的不便。在计算机网络中,文件传输只是一个很小很细微的功能。但它到底是怎样实现的呢?下面就让我们自己完成一个简单的实现文件传输功能的传输器吧。 总体设计2.1 总体设计概念为了实现文件传输等功能,服务器与客户端采用TCP/IP连接方式。程序启动时,服务器开始监听,客户端连接服务器。在客户端和服务器都各自实现相应功能。当实现相应功能时,应注意权限设置。2.2 系统框架选择传输控制协议TCP,分别建立客户端与服务器端;并设置相应的框架。2.3 模块划分1)服务器端,主要实现向各个客户端发送消息,接受来自客户端的各种信息并综合处理,具体功能如下:连接控制: 包括启动服务器、断开服务器以及断开

8、某个客户端的连接;管理作用: 包括对参与聊天者的昵称进行修改以及向所有或某个客户端发送消息,可以创建,删除,重命名文件等。登陆信息: 检查用户是否已登陆,如登录,显示登录用户。消息处理: 解析客户端与服务器端的消息交互类型,并做出相应处理,能够找到消息所对应的接收端。监听作用: 实现对服务器发送过来的消息进行监听的功能;2)客户端:主要实现向服务器端发布消息,并且对来自服务器的消息做出相应的响应。具体功能如下:连接功能: 输入服务器地址,实现登录及断开功能登录设置: 登录时,发送消息使服务器端获得相关登录信息。消息处理: 接收由服务器端发送来的信息,并做出相应的响应;消息处理: 相应从服务器端

9、接收到的消息交互类型,实现用户与用户之间的信息交互和文件交互;文件上传,下载:实现文件上传,下载以及查看服务器下默认的文件列表等。 详细设计3.1 软件层次模型服务器层次结构: 客户端层次结构:3.2 流程图根据以上的程序模块划分,设计好服务器端和客户端的流程图,如下:服务器端流程:客户端流程: 编程以及运行结果4.1 服务器1.进入服务器,等待连接。int main(int argc, char *argv) printf(n欢迎来到张驹强,李欢和谭建的FTP服务器n); /get the server socket server_sock = socket(PF_INET, SOCK_ST

10、REAM, 0); if(server_sock = -1) /create socket failed printf(请求socket创建失败n); exit(-1); else printf(请求socket创建成功!n); /configure server address,port memset(&server_addr, 0 ,sizeof(server_addr); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); /server_addr.sin_addr.s_addr = h

11、tonl(INADDR_ANY); server_addr.sin_addr.s_addr = inet_addr(127.0.0.1); if(server_addr.sin_addr.s_addr = INADDR_NONE) printf(IP地址错误!n); exit(-1); server_adr_len = sizeof server_addr; /bind z = bind(server_sock, (struct sockaddr *)&server_addr, server_adr_len); if(z = -1) printf(绑定失败!n); exit(-1); else

12、 printf(绑定成功!n); /listen z = listen(server_sock, 5); if(z 0) printf(服务器无法监听!); exit(1); else printf(服务器开始监听n); /loop and wait for connection while(1) /struct sockaddr_in client_addr; client_addr_len = sizeof(client_addr); i = 0; printf(等待连接请求.n); /accept an request while(1) pthread_t thread; client_

13、sock = accept(server_sock, (struct sockaddr *)&client_addr, &client_addr_len); if (client_sock 0 ) printf( 请求出错!n ); continue; /实现服务器多线程操作 if(pthread_create(&thread,NULL,handleFunc,&client_sock) )!= 0) printf(创建线程失败!n); break; close(server_sock); return 0;2.建立连接。void command_port(char *params, char

14、*reply) unsigned long a0, a1, a2, a3, p0, p1, addr; sscanf(params, %lu,%lu,%lu,%lu,%lu,%lu, &a0, &a1, &a2, &a3, &p0, &p1); addr = htonl(a0 24) + (a1 16) + (a2 8) + a3); if(addr != client_addr.sin_addr.s_addr) stpcpy(reply, 数据传输socket请求IP地址错误!n); return; /setup the port for the data connection memset

15、(&data_addr, 0, sizeof(data_addr); data_addr.sin_family = AF_INET; data_addr.sin_addr.s_addr = addr; data_addr.sin_port = htons(p0 8) + p1); /get the data cocket data_sock = socket(PF_INET, SOCK_STREAM, 0); if(data_sock = -1) printf(数据传输socket创建失败!); exit(-1); stpcpy(reply, 无法创建数据传输socketrn); return

16、; /connect to the client data socket if(connect(data_sock, (struct sockaddr *)&data_addr, sizeof(data_addr) 0) printf(数据传输socket连接失败!rn); exit(-1); stpcpy(reply, 数据传输socket连接失败!rn); return; stpcpy(reply, 双方连接建立成功!rn);3.显示登录信息。 if(strcmp(command, USE) = 0)/USER stpcpy(reply, sucrn); write(clifd, repl

17、y, strlen(reply); printf(%s进入服务器 n, buffer+4); continue; 4.创建文件。 if(stat(filename, &sbuf) = -1) /printf(创建文件失败.n); outfile = fopen(filename, w); if(outfile = 0) printf(创建文件失败 rn); exit(-1); stpcpy(reply, 创建文件失败 rn); close(data_sock); return; 5.删除文件。void command_delete(char filename,char *reply) int

18、i=remove(filename); if(i0) stpcpy(reply, 删除失败,可能由于目标文件不存在rn); else stpcpy(reply, 删除成功rn); 6.重命名文件。void command_rename(char filename,char newname,char *reply) /printf(%sn, filename); /printf(%sn, newname); int i=rename(filename,newname); if(id_name, .) = 0) | (strcmp(myitem-d_name, .) = 0) continue;

19、stpcpy(info, myitem-d_name); strcat(info,t); strcat(buf,info); n+; if(n=4) strcat(buf,n); n=0; closedir(mydir); stpcpy(reply, buf); return;上图为服务器端运行结果。4.2 客户端1.建立连接。 server_ip = LOCAL_IP; server_port = SERVER_PORT; /connect to the ftp server server_host = gethostbyname(server_ip); if(server_host = (

20、struct hostent *)NULL) printf(gethostbyname failedn); exit(1); /setup the port for the connection memset(&server_addr, 0, sizeof(server_addr); server_addr.sin_family = AF_INET; memcpy(&server_addr.sin_addr, server_host-h_addr, server_host-h_length); server_addr.sin_port = htons(server_port); /get th

21、e socket server_sock = socket(PF_INET, SOCK_STREAM, 0); if(server_sock error on socket()n); exit(1); /connect to the server if(connect(server_sock, (struct sockaddr *)&server_addr, sizeof(server_addr) error on connect()n); close(server_sock); exit(1); /connect to the ftp server successful printf(连接到

22、 %s:%dn, server_ip, server_port); user_login(); help_info();2.连接到服务器。void user_login() printf(用户名称:); fgets(line_in, MAX_INPUT_SIZE, stdin); line_instrlen(line_in)-1 = 0; stpcpy(name, line_in); send_msg(USER, line_in, 1); z = read(server_sock, buffer, sizeof(buffer); /printf(%sn,buffer); bufferz-2 =

23、 0; if(strncmp(suc, buffer, 3) = 0) printf(欢迎来到FTP:%sn,name); printf(请选择操作n); else printf(被服务器拒绝n); return;3.帮助界面。void help_info() printf(? or helpt获得帮助信息n); printf(lst获得当前目录下的文件n); printf(pwdt获得当前路径n); printf(cdt修改路径(需要高级权限)n); printf(get t下载数据n); printf(put t上传数据n); printf(apply t申请高级权限n); printf(

24、rename t修改服务器中的中文名(需要高级权限)n); printf(rmt删除服务器中的文件(需要高级权限)n); printf(quitt退出FTPn); 4.获得服务器当前路径。void command_pwd() send_msg(PWD, name, 0); z = read(server_sock, buffer, sizeof(buffer); bufferz-2 = 0; printf(%sn, buffer);5.修改路径。void command_cd() send_msg(CWD, &line_in3, 1); z = read(server_sock, buffer

25、, sizeof(buffer); bufferz-2 = 0; printf(%sn, buffer);6.传输文件。int command_port() if(client_sock 0) struct sockaddr_in local_addr; socklen_t local_addr_len = sizeof local_addr; memset(&local_addr, 0, sizeof local_addr); if(getsockname(server_sock, (struct sockaddr *)&local_addr, &local_addr_len) != 0)

26、printf(获得本地ip地址失败n); return -1; local_ip = inet_ntoa(local_addr.sin_addr); local_port = local_addr.sin_port; /printf(local addr %s:%dn, local_ip, local_port); char client_port8 = ; sprintf(client_port, %d.%d, (int)(local_port/256), (int)(1 + local_port - 256 * (int)(local_port/256); sprintf(port_addr, %s.%s, local_ip, client_port); replace(port_addr, ., ,

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2