Linux文件传输系统2Word文档格式.docx

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

Linux文件传输系统2Word文档格式.docx

《Linux文件传输系统2Word文档格式.docx》由会员分享,可在线阅读,更多相关《Linux文件传输系统2Word文档格式.docx(27页珍藏版)》请在冰点文库上搜索。

Linux文件传输系统2Word文档格式.docx

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

④消息处理:

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

⑤监听作用:

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

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

{

请求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)

IP地址错误!

server_adr_len=sizeofserver_addr;

//bind

z=bind(server_sock,(structsockaddr*)&

server_addr,server_adr_len);

if(z==-1)

绑定失败!

绑定成功!

//listen

z=listen(server_sock,5);

if(z<

0)

服务器无法监听!

"

exit

(1);

服务器开始监听\n"

//loopandwaitforconnection

while

(1)

//structsockaddr_inclient_addr;

client_addr_len=sizeof(client_addr);

i=0;

等待连接请求...\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("

创建线程失败!

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地址错误!

return;

//setuptheportforthedataconnection

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)

数据传输socket创建失败!

无法创建数据传输socket\r\n"

//connecttotheclientdatasocket

if(connect(data_sock,(structsockaddr*)&

data_addr,sizeof(data_addr))<

数据传输socket连接失败!

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

创建文件失败\r\n"

close(data_sock);

5.删除文件。

voidcommand_delete(charfilename[],char*reply){

inti=remove(filename);

if(i<

0)

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

else

删除成功\r\n"

6.重命名文件。

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

%s\n"

filename);

newname);

inti=rename(filename,newname);

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

重命名成功\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->

.."

)==0))

stpcpy(info,myitem->

d_name);

strcat(info,"

\t"

strcat(buf,info);

n++;

if(n==4){

strcat(buf,"

n=0;

closedir(mydir);

stpcpy(reply,buf);

上图为服务器端运行结果。

4.2客户端

1.建立连接。

server_ip=LOCAL_IP;

server_port=SERVER_PORT;

//connecttotheftpserver

server_host=gethostbyname(server_ip);

if(server_host==(structhostent*)NULL)

>

gethostbynamefailed\n"

//setuptheportfortheconnection

server_addr,0,sizeof(server_addr));

memcpy(&

server_addr.sin_addr,server_host->

h_addr,server_host->

h_length);

server_addr.sin_port=htons(server_port);

//getthesocket

if(server_sock<

erroronsocket()\n"

//connecttotheserver

if(connect(server_sock,(structsockaddr*)&

server_addr,sizeof(server_addr))<

erroronconnect()\n"

//connecttotheftpserversuccessful

连接到%s:

%d\n"

server_ip,server_port);

user_login();

help_info();

2.连接到服务器。

voiduser_login()

用户名称:

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

buffer);

buffer[z-2]=0;

if(strncmp("

suc"

buffer,3)==0)

欢迎来到FTP:

name);

请选择操作\n"

else{

被服务器拒绝\n"

3.帮助界面。

voidhelp_info()

?

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

ls\t获得当前目录下的文件\n"

pwd\t获得当前路径\n"

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

get<

文件名>

\t下载数据\n"

put<

\t上传数据\n"

apply<

密码>

\t申请高级权限\n"

rename<

\t修改服务器中的中文名(需要高级权限)\n"

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

quit\t退出FTP\n"

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

voidcommand_pwd()

PWD"

name,0);

buffer);

5.修改路径。

voidcommand_cd()

CWD"

line_in[3],1);

6.传输文件。

intcommand_port()

if(client_sock<

structsockaddr_inlocal_addr;

socklen_tlocal_addr_len=sizeoflocal_addr;

local_addr,0,sizeoflocal_addr);

if(getsockname(server_sock,(structsockaddr*)&

local_addr,&

local_addr_len)!

=0)

获得本地ip地址失败\n"

return-1;

local_ip=inet_ntoa(local_addr.sin_addr);

local_port=local_addr.sin_port;

localaddr%s:

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,"

"

"

24);

if(data_conn(local_ip,local_port+1)==-1)return-1;

}

PORT"

port_addr,1);

socklen_tdata_addr_len=sizeofdata_addr;

data_addr,0,sizeofdata_addr);

data_sock=accept(client_sock,(structsockaddr*)&

data_addr,&

data_addr_len);

if(data_sock<

传输数据socket创建失败!

intdata_conn(char*ip,intport)

client_sock=socket(PF_INET,SOCK_STREAM,0);

if(client_sock==-1)//createsocketfailed

close(client_sock);

client_addr,0,sizeof(client_addr));

socklen_tclient_addr_len=sizeofclient_addr;

client_addr.sin_family=AF_INET;

client_addr.sin_port=htons(port);

//client_addr.sin_addr.s_addr=htonl(INADDR_ANY);

client_addr.sin_addr.s_addr=inet_addr(ip);

if(client_addr.sin_addr.s_addr==INADDR_NONE)

IP地址错误\n"

z=bind(client_sock,(structsockaddr*)&

client_addr,client_addr_len);

perror("

传输数据socket绑定失败\n"

z=listen(client_sock,1);

传输数据socket监听失败!

传输数据socket正在监听...\n"

7.申请权限。

voidcommand_apply(char*code){

APPL"

code,1);

if(strncmp(buffer,"

Y"

1)==0)

p=1;

send_msg("

APSU"

name,1);

权限申请成功\n"

}else{

p=0;

权限申请失败\n"

8.删除服务器下的文件。

voidcommand_delete(char*filename){

if(strlen(filename)==0)

{

prin

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

当前位置:首页 > 自然科学 > 物理

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

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