Linux课程设计.docx

上传人:b****1 文档编号:10393802 上传时间:2023-05-25 格式:DOCX 页数:30 大小:432.73KB
下载 相关 举报
Linux课程设计.docx_第1页
第1页 / 共30页
Linux课程设计.docx_第2页
第2页 / 共30页
Linux课程设计.docx_第3页
第3页 / 共30页
Linux课程设计.docx_第4页
第4页 / 共30页
Linux课程设计.docx_第5页
第5页 / 共30页
Linux课程设计.docx_第6页
第6页 / 共30页
Linux课程设计.docx_第7页
第7页 / 共30页
Linux课程设计.docx_第8页
第8页 / 共30页
Linux课程设计.docx_第9页
第9页 / 共30页
Linux课程设计.docx_第10页
第10页 / 共30页
Linux课程设计.docx_第11页
第11页 / 共30页
Linux课程设计.docx_第12页
第12页 / 共30页
Linux课程设计.docx_第13页
第13页 / 共30页
Linux课程设计.docx_第14页
第14页 / 共30页
Linux课程设计.docx_第15页
第15页 / 共30页
Linux课程设计.docx_第16页
第16页 / 共30页
Linux课程设计.docx_第17页
第17页 / 共30页
Linux课程设计.docx_第18页
第18页 / 共30页
Linux课程设计.docx_第19页
第19页 / 共30页
Linux课程设计.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Linux课程设计.docx

《Linux课程设计.docx》由会员分享,可在线阅读,更多相关《Linux课程设计.docx(30页珍藏版)》请在冰点文库上搜索。

Linux课程设计.docx

Linux课程设计

重庆大学课程设计报告

 

课程设计题目:

Linux下基于socket的文件传输程序设计

 

学院:

计算机学院

专业班级:

网络工程一班

年级:

姓名:

学号:

完成时间:

2012年06月22日

成绩:

指导教师:

重庆大学教务处制

课程设计指导教师评定成绩表

项目

分值

优秀

(100>x≥90)

良好

(90>x≥80)

中等

(80>x≥70)

及格

(70>x≥60)

不及格(x<60)

评分

参考标准

参考标准

参考标准

参考标准

参考标准

学习态度

15

学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作

学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务

学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作

学习态度尚可,能遵守组织纪律,能按期完成任务

学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度

技术水平与实际能力

25

设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信

设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信

设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信

设计基本合理,理论分析与计算无大错,实验数据无大错

设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题

创新

10

有重大改进或独特见解,有一定实用价值

有较大改进或新颖的见解,实用性尚可

有一定改进或新的见解

有一定见解

观念陈旧

论文(计算书、图纸)撰写质量

50

结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰

结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰

结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰

结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整

内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰

指导教师评定成绩:

指导教师签名:

年月日

重庆大学本科学生课程设计任务书

课程设计题目

Linux下基于socket的文件传输程序设计

学院

计算机学院

专业

网络工程

年级

2009级

已知参数和设计要求:

系统分为客户端和服务器端,客服端可以实现文件的上传、下载以及查看服务器下默认目录的文件列表;服务器端可以对文件进行管理,包括上传,下载,

删除文件,重命名等;

学生应完成的工作:

1、编程实现上述功能。

2、在内核中添加一个自己的内存分配和释放的系统调用(可以调用

malloc()和free()等内存管理函数实现),并在程序中调用;

3、支持多个客户端同时对服务器中的文件进行操作(多线程);

加分项:

1、实现了用户的权限管理

2、内存分配和释放用内存池实现;

3、程序功能比较完善,如可以变更文件目录等;

目前资料收集情况(含指定参考资料):

[1]美RobertLove著_陈莉君康华译_Linux内核设计与实现_机械工业出版社_2011.6

[2]美DanielP.Bovet著_陈莉群冯锐牛欣源译_深入理解LINUX内核_中国电力出版社_2008

课程设计的工作计划:

第一天:

讨论系统实现过程,并完成服务器与客户端通讯问题,主要解决了服务器端功能。

第二天:

完成了客户端功能和实现了多线程。

第三天:

完成了用户权限管理以及变更文件目录等。

第四天:

检查成果。

第五天:

完成课程设计报告。

任务下达日期2012年06月18日

完成日期2012年06月22日

 

计算机Linux课程设计报告书

——文件传输系统

目录

Ⅰ引言…………………………………………………………………………………2

Ⅱ总体设计……………………………………………………………………………2

2.1总体设计概念……………………………………………………………………2

2.2系统架构…………………………………………………………………………2

2.3模块划分…………………………………………………………………………2

Ⅲ详细设计……………………………………………………………………………3

3.1软件层次模型……………………………………………………………………3

3.2流程图……………………………………………………………………………4

Ⅳ编程及运行结果……………………………………………………………………5

4.1服务器端设计与编码……………………………………………………………5

4.2客户端设计与编码………………………………………………………………12

Ⅴ课程设计总结与体会…………………………………………………………………23

Ⅵ参考文献……………………………………………………………………………24

 

Ⅰ引言

随着我们的生活与计算机越来越紧密的结合起来,计算机可以取代生活中很多的事情。

最简单的,计算机的文件传输就可以避免远距离纸质文件传输带来的不便。

在计算机网络中,文件传输只是一个很小很细微的功能。

但它到底是怎样实现的呢?

下面就让我们自己完成一个简单的实现文件传输功能的传输器吧。

Ⅱ总体设计

2.1总体设计概念

为了实现文件传输等功能,服务器与客户端采用TCP/IP连接方式。

程序启动时,服务器开始监听,客户端连接服务器。

在客户端和服务器都各自实现相应功能。

当实现相应功能时,应注意权限设置。

2.2系统框架

选择传输控制协议TCP,分别建立客户端与服务器端;并设置相应的框架。

2.3模块划分

1)服务器端,主要实现向各个客户端发送消息,接受来自客户端的各种信息并综合处理,具体功能如下:

①连接控制:

包括启动服务器、断开服务器以及断开某个客户端的连接;

②管理作用:

包括对参与聊天者的昵称进行修改以及向所有或某个客户端发送消息,可以创建,删除,重命名文件等。

③登陆信息:

检查用户是否已登陆,如登录,显示登录用户。

④消息处理:

解析客户端与服务器端的消息交互类型,并做出相应处理,能够找到消息所对应的接收端。

⑤监听作用:

实现对服务器发送过来的消息进行监听的功能;

2)客户端:

主要实现向服务器端发布消息,并且对来自服务器的消息做出相应的响应。

具体功能如下:

①连接功能:

输入服务器地址,实现登录及断开功能

②登录设置:

登录时,发送消息使服务器端获得相关登录信息。

③消息处理:

接收由服务器端发送来的信息,并做出相应的响应;

④消息处理:

相应从服务器端接收到的消息交互类型,实现用户与用户之间的信息交互和文件交互;

⑤文件上传,下载:

实现文件上传,下载以及查看服务器下默认的文件列表等。

Ⅲ详细设计

3.1软件层次模型

服务器层次结构:

客户端层次结构:

3.2流程图

根据以上的程序模块划分,设计好服务器端和客户端的流程图,如下:

服务器端流程:

客户端流程:

Ⅳ编程以及运行结果

4.1服务器

1.进入服务器,等待连接。

intmain(intargc,char**argv)

{

printf("\n欢迎来到张驹强,李欢和谭建的FTP服务器\n");

//gettheserversocket

server_sock=socket(PF_INET,SOCK_STREAM,0);

if(server_sock==-1)//createsocketfailed

{

printf("请求socket创建失败\n");

exit(-1);

}

elseprintf("请求socket创建成功!

\n");

//configureserveraddress,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=htonl(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=sizeofserver_addr;

//bind

z=bind(server_sock,(structsockaddr*)&server_addr,server_adr_len);

if(z==-1)

{

printf("绑定失败!

\n");

exit(-1);

}

elseprintf("绑定成功!

\n");

//listen

z=listen(server_sock,5);

if(z<0)

{

printf("服务器无法监听!

");

exit

(1);

}

elseprintf("服务器开始监听\n");

//loopandwaitforconnection

while

(1)

{

//structsockaddr_inclient_addr;

client_addr_len=sizeof(client_addr);

i=0;

printf("等待连接请求...\n");

//acceptanrequest

while

(1){

pthread_tthread;

client_sock=accept(server_sock,(structsockaddr*)&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);

return0;

}

2.建立连接。

voidcommand_port(char*params,char*reply)

{

unsignedlonga0,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;

}

//setuptheportforthedataconnection

memset(&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);

//getthedatacocket

data_sock=socket(PF_INET,SOCK_STREAM,0);

if(data_sock==-1)

{

printf("数据传输socket创建失败!

");

exit(-1);

stpcpy(reply,"无法创建数据传输socket\r\n");

return;

}

//connecttotheclientdatasocket

if(connect(data_sock,(structsockaddr*)&data_addr,sizeof(data_addr))<0)

{

printf("数据传输socket连接失败!

\r\n");

exit(-1);

stpcpy(reply,"数据传输socket连接失败!

\r\n");

return;

}

stpcpy(reply,"双方连接建立成功!

\r\n");

}

3.显示登录信息。

if(strcmp(command,"USE")==0)//USER

{

stpcpy(reply,"suc\r\n");

write(clifd,reply,strlen(reply));

printf("%s进入服务器\n",buffer+4);

continue;

}

4.创建文件。

if(stat(filename,&sbuf)==-1)

{

//printf("创建文件失败.\n");

}

outfile=fopen(filename,"w");

if(outfile==0)

{

printf("创建文件失败\r\n");

exit(-1);

stpcpy(reply,"创建文件失败\r\n");

close(data_sock);

return;

}

5.删除文件。

voidcommand_delete(charfilename[],char*reply){

inti=remove(filename);

if(i<0)

stpcpy(reply,"删除失败,可能由于目标文件不存在\r\n");

else

stpcpy(reply,"删除成功\r\n");

}

6.重命名文件。

voidcommand_rename(charfilename[],charnewname[],char*reply){

//printf("%s\n",filename);

//printf("%s\n",newname);

inti=rename(filename,newname);

if(i<0)

stpcpy(reply,"重命名失败,可能由于目标文件不存在\r\n");

else

stpcpy(reply,"重命名成功\r\n");

}

7.显示当前目录。

voidcommand_list(char*reply)

{

intn=0;

charinfo[MAX_INPUT_SIZE];

charbuf[MAX_INPUT_SIZE];

stpcpy(buf,"");

DIR*mydir;

structdirent*myitem;

mydir=opendir(".");

while((myitem=readdir(mydir))!

=NULL)

{

if((strcmp(myitem->d_name,".")==0)||(strcmp(myitem->d_name,"..")==0))

continue;

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;

//connecttotheftpserver

server_host=gethostbyname(server_ip);

if(server_host==(structhostent*)NULL)

{

printf(">gethostbynamefailed\n");

exit

(1);

}

//setuptheportfortheconnection

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);

//getthesocket

server_sock=socket(PF_INET,SOCK_STREAM,0);

if(server_sock<0)

{

printf(">erroronsocket()\n");

exit

(1);

}

//connecttotheserver

if(connect(server_sock,(structsockaddr*)&server_addr,sizeof(server_addr))<0)

{

printf(">erroronconnect()\n");

close(server_sock);

exit

(1);

}

//connecttotheftpserversuccessful

printf(">连接到%s:

%d\n",server_ip,server_port);

user_login();

help_info();

2.连接到服务器。

voiduser_login()

{

printf(">用户名称:

");

fgets(line_in,MAX_INPUT_SIZE,stdin);

line_in[strlen(line_in)-1]='\0';

stpcpy(name,line_in);

send_msg("USER",line_in,1);

z=read(server_sock,buffer,sizeof(buffer));

//printf("%s\n",buffer);

buffer[z-2]=0;

if(strncmp("suc",buffer,3)==0)

{

printf("欢迎来到FTP:

%s\n",name);

printf("请选择操作\n");

}

else{

printf("被服务器拒绝\n");

}

return;

}

3.帮助界面。

voidhelp_info()

{

printf("?

orhelp\t获得帮助信息\n");

printf("ls\t获得当前目录下的文件\n");

printf("pwd\t获得当前路径\n");

printf("cd\t修改路径(需要高级权限)\n");

printf("get<文件名>\t下载数据\n");

printf("put<文件名>\t上传数据\n");

printf("apply<密码>\t申请高级权限\n");

printf("rename<文件名>\t修改服务器中的中文名(需要高级权限)\n");

printf("rm\t删除服务器中的文件(需要高级权限)\n");

printf("quit\t退出FTP\n");

}

4.获得服务器当前路径。

voidcommand_pwd()

{

send_msg("PWD",name,0);

z=read(server_sock,buffer,sizeof(buffer));

buffer[z-2]=0;

printf("%s\n",buffer);

}

5.修改路径。

voidcommand_cd()

{

send_msg("CWD",&line_in[3],1);

z=read(server_sock,buffer,sizeof(buffer));

buffer[z-2]=0;

printf("%s\n",buffer);

}

6.传输文件。

intcommand_port()

{

if(client_sock<0)

{

structsockaddr_inlocal_addr;

socklen_tlocal_addr_len=sizeoflocal_addr;

memset(&local_addr,0,sizeoflocal_addr);

if(getsockname(server_sock,(structsockaddr*)&local_addr,&local_addr_len)!

=0)

{

printf("获得本地ip地址失败\n");

return-1;

}

local_ip=inet_ntoa(local_addr.sin_addr);

local_port=local_addr.sin_port;

//printf("localaddr%s:

%d\n",local_ip,local_port);

charclient_port[8]="";

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