linux下基于Socket的文件传输程序课程设计.docx

上传人:wj 文档编号:102538 上传时间:2022-10-03 格式:DOCX 页数:13 大小:104.95KB
下载 相关 举报
linux下基于Socket的文件传输程序课程设计.docx_第1页
第1页 / 共13页
linux下基于Socket的文件传输程序课程设计.docx_第2页
第2页 / 共13页
linux下基于Socket的文件传输程序课程设计.docx_第3页
第3页 / 共13页
linux下基于Socket的文件传输程序课程设计.docx_第4页
第4页 / 共13页
linux下基于Socket的文件传输程序课程设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

linux下基于Socket的文件传输程序课程设计.docx

《linux下基于Socket的文件传输程序课程设计.docx》由会员分享,可在线阅读,更多相关《linux下基于Socket的文件传输程序课程设计.docx(13页珍藏版)》请在冰豆网上搜索。

linux下基于Socket的文件传输程序课程设计.docx

课程设计题目 Linux下基于Socket的文件传输程序设计

学院 计算机学院 专业 计算机科学与技术 年级 2009级已知参数和设计要求:

要求:

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

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

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

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

加分项:

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

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

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

学生应完成的工作:

设计并实现。

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

Linux内核设计与实现(第三版)

课程设计的工作计划:

任务下达日期2012年7月2日 完成日期2012年7月5日

1需求分析

1.1系统目的

Linux作为一个先进的操作系统,其发展越来越快,应用领域也越来越广泛。

在学习了《linux内核设计与实现》之后,亲自设计并实现linux下的编程,不仅有助于巩固学过的知识,更能扩宽自己的视野,增强动手实践能力。

1.2课程要求

Linux下基于Socket的文件传输程序设计,包括对文件进行管理,包括上传,下载,删除文件,重命名,支持多线程等。

1.3开发工具与开发平台

开发工具:

C语言开发平台:

Linux

2系统设计

2.1系统功能

此软件的主要功能有:

1.实现在linux环境下的基于socket文件传输;

2.对linux环境下的文件进行简单管理。

其中客户端与服务器的所要完成的具体功能如下:

客户端:

(1)连接服务器,并发送指令给服务器;

(2)接收并识别服务器发来的信息;

(3)通过不同指令实现文件的查看,下载,和上传。

服务器:

(1)能查看本地的文件,并进行简单的管理,如删除,重命名等

(2)接收来自客户端的连接请求,并赋予客户端不同的操作权限;

(3)识别客户端的发来的指令,实现与客户端间的文件下载和上传。

2.2系统结构

软件由服务器端和客户端两部分组成,服务器端监听客户对某个特定端口的网络连接请求,并与之建立连接,这样,这个客户的数据就可以发送到服务器。

客户端的任务是将用户的指令发送给服务器,且客户端可以有多个。

客户端运行时将立即向服务器的某个端口发送连接请求,待连接建立后则由用户的发送线程发送该用户的指令到服务器。

服务器端的主线程负责监听某个端口,接收用户的发送线程发出的指令。

在客户端,用户接收线程接收服务器发送的数据,由用户端主线程进行处理后显示。

2.3客户端指令

查看服务器下指定路径下的所有文件:

look_up;

下载服务器下指定路径下的指定文件:

downloadfilename;上传客户端下指定路径下的指定文件:

senddata filename;退出连接:

end;

2.4服务器指令

运行服务器后,系统提示指令

查看所有文件请输入1;重命名文件请输入2;删除文件请输入3;开启服务监听模式4;

2.5数据流设计

3测试结果

服务器进行文件管理的操作

服务器监听多个客户端并相应其指令

客户端0连接服务器

客户端1连接服务器

4总结

这次课程设计是linux下的socket通信,以c为编程语言,并实现了文件管理与多线程开发。

通过此次课程设计,进一步熟悉了linux操作系统的使用,掌握了linux下

socket通信的基本配置,加深了对所学知识的理解,更扩宽了自己的视野,增强动了手实践能力。

5参考资料

《Linux内核设计与实现》第三版 RobertLove著

6附录代码

主要服务器代码:

void*get_client(void*sockfd)

{

charbuf[BUFFER_SIZE];memset(buf,0,sizeof(buf));

intread_size;

//time_ttimep;

intlimit;

printf("有客户端接入!

请输入要授予client%d的权限\n",maxi);printf("1为仅能查看服务器下的文件名\n");

printf("2为能查看服务器下的文件名与下载文件\n");

printf("3为能查看服务器下的文件名,上传文件,下载文件\n");scanf("%d",&limit);

if(limit==1) {strcpy(buf,"1");}elseif(limit==2){strcpy(buf,"2");}elseif(limit==3){strcpy(buf,"3");}

else{printf("输入错误,结束程序!

");exit(0);}

send((int)sockfd,buf,strlen(buf)+1,0);//客户端权限控制

do{



memset(buf,0,sizeof(buf));//数组清零if((read_size=recv((int)sockfd,buf,BUFFER_SIZE,0))==-1){

perror("recverror.");exit

(1);

}//接收数据

if(!

strcmp(buf,"end"))

{

puts("客户端退出");break; }

elseif(!

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%c\n",ptr->d_name,ptr->d_type);//打

印文件名,文件类型

存入buf发送



strcat(buf,ptr->d_name);strcat(buf,"");//文件名,文件类型

}

closedir(dir);send((int)sockfd,buf,strlen(buf)+1,0);

}//相应客户端查看文件操作

else{

if(!

strncmp("download",buf,8))

{

chartest[50];chartest2[50];

mid(test,buf,strlen(buf)-9,9);strcpy(test2,test_path);strcat(test2,test);from_fd=open(test2,O_RDONLY);//打开要发送的文件if(from_fd<0)

{

puts("打开源文件失败,退出!

\n");exit(-1);

}

memset(buf,0,sizeof(buf));intret=1;

charbuf_send[BUFFER_SIZE];memset(buf_send,0,sizeof(buf_send));

到文件

strcpy(buf,"begin");while(ret){

ret=read(from_fd,buf_send,BUFFER_SIZE);//读入要发送

}

strcat(buf,buf_send);send((int)sockfd,buf,strlen(buf)+1,0);//发送

/* //while(ret){

ret=read(from_fd,buf_send,BUFFER_SIZE);send((int)sockfd,buf_send,strlen(buf_send)+1,0);

// }*/puts("succeed

send!

");memset(test,0,sizeof(test));memset(test2,0,sizeof(test2));

close(from_fd);

//free(buf_send);

}

elseif(!

strncmp("senddata",buf,8)){

chargetname[20];chargetname2[50];intto_fd;

char*ptr;

ptr=strchr(buf,'@');intflag=(int)(ptr-buf);

e);

mid(getname,buf,flag-9,9);strcpy(getname2,test_path);strcat(getname2,getnam

to_fd = open(getname2, O_WRONLY|O_CREAT,

S_IRUSR|S_IWUSR);//创建要接收的文件

intx=1;

charbuf_receive[BUFFER_SIZE];memset(buf_receive,0,sizeof(buf_receive));

数据写入文件

mid(buf_receive,buf,strlen(buf)-flag-1,flag+1);x=write(to_fd,buf_receive,strlen(buf)-flag-1);//把收到到

puts("文件上传成功!

\n");

memset(getname,0,sizeof(getname));memset(getname2,0,sizeof(getname2));close(to_fd);

}

else{puts("无效指令\n");}

}

}while(read_size!

=0);

close((int)sockfd);

//free(buf);return(NULL);

}

4");

void*get_command()

{ intop;

puts("查看文件1;重命名文件2;删除文件3;开始进入服务模式

while

(1){scanf("%d",&op);if(op==1){//查看

dir=opendir(test_path);while((ptr=readdir(dir))!

=NULL)

if(strcmp(ptr->d_name,".")&&strcmp(ptr->d_name,".."))printf("d_name:

%s%c\n",ptr->d_name,ptr->d_type);//打印文

件名,文件类型

模式4\n");

closedir(dir);

puts("查看文件1;重命名文件2;删除文件3;开始进入服务

}

elseif(op==2){//重命名

puts("输入要重命名的文件,以及更改后到名字:

");

char name_from[20];char name_to[20];charname_from_path[50];charname_to_path[50];

scanf("%s",name_from);scanf("%s",n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1