




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.z.《Linu*网络编程》课程设计班级::指导老师:一、设计背景Linu*操作系统作为一个开源的操作系统被越来越多的人所应用,它的好处在于操作系统源代码的公开化!只要是基于GNU公约的软件你都可以任意使用并修改它的源代码。通过这次课程设计能更好的学习网络编程知识和掌握LINU*平台上应用程序设计开发的过程,将大学四年所学知识综合运用,为未来的工作学习打下基础。二、设计目的1、学习epoll跟FTP被动模式2、掌握linu*基本命令,例如ls、cd、login;3、学会如何编译、运行三、环境要求1、centos64位操作系统2、gcc编译器四、设计原理4.1客户端客户端程序的主要任务有以下3个:(1)、分析用户输入的命令。(2)、根据命令向服务器发出请求(3)、接受服务器返回请求的结果客户端为用户提供了3种命令:(1)、get:从服务器下载文件(2)、list:列出客户端当前目录的容(3)、quit离开4.2服务器端(1)、分析请求代码。(2)、根据请求代码做相应的处理(3)、等待返回结果或者应答信息五、软件测试结果六、部分主代码*include"ftserve.h"intmain(intargc,char*argv[]){ intsock_listen,sock_control,port,pid; if(argc!=2){ printf("usage:./ftserveport\n"); e*it(0); } port=atoi(argv[1]); //createsocket if((sock_listen=socket_create(port))<0){ perror("Errorcreatingsocket"); e*it(1); } while(1){ //waitforclientrequest //createnewsocketforcontrolconnection if((sock_control=socket_accept(sock_listen)) <0) break; //createchildprocesstodoactualfiletransfer if((pid=fork())<0){ perror("Errorforkingchildprocess"); }elseif(pid==0){ close(sock_listen); ftserve_process(sock_control); close(sock_control); e*it(0); } close(sock_control); } close(sock_listen); return0;}/***Sendfilespecifiedinfilenameoverdataconnection,sending*controlmessageovercontrolconnection*Handlescaseofnullorinvalidfilename*/voidftserve_retr(intsock_control,intsock_data,char*filename){ FILE*fd=NULL; chardata[MA*SIZE]; size_tnum_read; fd=fopen(filename,"r"); if(!fd){ //senderrorcode(550Requestedactionnottaken) send_response(sock_control,550); }else{ //sendokay(150Filestatusokay) send_response(sock_control,150); do{ num_read=fread(data,1,MA*SIZE,fd); if(num_read<0){ printf("errorinfread()\n"); } //sendblock if(send(sock_data,data,num_read,0)<0) perror("errorsendingfile\n"); }while(num_read>0); //sendmessage:226:closingconn,filetransfersuccessful send_response(sock_control,226); fclose(fd); }}/***Sendlistoffilesincurrentdirectory*overdataconnection*Return-1onerror,0onsuccess*/intftserve_list(intsock_data,intsock_control){ chardata[MA*SIZE]; size_tnum_read; FILE*fd; intrs=system("ls-l|tail-n+2>tmp.t*t"); if(rs<0){ e*it(1); } fd=fopen("tmp.t*t","r"); if(!fd){ e*it(1); } /*Seektothebeginningofthefile*/ fseek(fd,SEEK_SET,0); send_response(sock_control,1);//starting memset(data,0,MA*SIZE); while((num_read=fread(data,1,MA*SIZE,fd))>0){ if(send(sock_data,data,num_read,0)<0){ perror("err"); } memset(data,0,MA*SIZE); } fclose(fd); send_response(sock_control,226); //send226 return0; }/***Opendataconnectiontoclient*Returns:socketfordataconnection*or-1onerror*/intftserve_start_data_conn(intsock_control){ charbuf[1024]; intwait,sock_data; //Waitforgo-aheadoncontrolconn if(recv(sock_control,&wait,sizeofwait,0)<0){ perror("Errorwhilewaiting"); return-1; } //Getclientaddress structsockaddr_inclient_addr; socklen_tlen=sizeofclient_addr; getpeername(sock_control,(structsockaddr*)&client_addr,&len); inet_ntop(AF_INET,&client_addr.sin_addr,buf,sizeof(buf)); //Initiatedataconnectionwithclient if((sock_data=socket_connect(CLIENT_PORT_ID,buf))<0) return-1; returnsock_data; }/***Authenticateauser'scredentials*Return1ifauthenticated,0ifnot*/intftserve_check_user(char*user,char*pass){ charusername[MA*SIZE]; charpassword[MA*SIZE]; char*pch; charbuf[MA*SIZE]; char*line=NULL; size_tnum_read; size_tlen=0; FILE*fd; intauth=0; fd=fopen(".auth","r"); if(fd==NULL){ perror("filenotfound"); e*it(1); } while((num_read=getline(&line,&len,fd))!=-1){ memset(buf,0,MA*SIZE); strcpy(buf,line); pch=strtok(buf,""); strcpy(username,pch); if(pch!=NULL){ pch=strtok(NULL,""); strcpy(password,pch); } //removeendoflineandwhitespace trimstr(password,(int)strlen(password)); if((strcmp(user,username)==0)&&(strcmp(pass,password)==0)){ auth=1; break; } } free(line); fclose(fd); returnauth;}/***Loginconnectedclient*/intftserve_login(intsock_control){ charbuf[MA*SIZE]; charuser[MA*SIZE]; charpass[MA*SIZE]; memset(user,0,MA*SIZE); memset(pass,0,MA*SIZE); memset(buf,0,MA*SIZE); //Waittorecieveusername if((recv_data(sock_control,buf,sizeof(buf)))==-1){ perror("recverror\n"); e*it(1); } inti=5; intn=0; while(buf[i]!=0) user[n++]=buf[i++]; //tellclientwe'rereadyforpassword send_response(sock_control,331); //Waittorecievepassword memset(buf,0,MA*SIZE); if((recv_data(sock_control,buf,sizeof(buf)))==-1){ perror("recverror\n"); e*it(1); } i=5; n=0; while(buf[i]!=0){ pass[n++]=buf[i++]; } return(ftserve_check_user(user,pass));}/***Waitformandfromclientand*sendresponse*Returnsresponsecode*/intftserve_recv_cmd(intsock_control,char*cmd,char*arg){ intrc=200; charbuffer[MA*SIZE]; memset(buffer,0,MA*SIZE); memset(cmd,0,5); memset(arg,0,MA*SIZE); //Waittorecievemand if((recv_data(sock_control,buffer,sizeof(buffer)))==-1){ perror("recverror\n"); return-1; } strncpy(cmd,buffer,4); char*tmp=buffer+5; strcpy(arg,tmp); if(strcmp(cmd,"QUIT")==0){ rc=221; }elseif((strcmp(cmd,"USER")==0)||(strcmp(cmd,"PASS")==0)|| (strcmp(cmd,"LIST")==0)||(strcmp(cmd,"RETR")==0)){ rc=200; }else{//invalidmand rc=502; } send_response(sock_control,rc); returnrc;}/***Childprocesshandlesconnectiontoclient*/voidftserve_process(intsock_control){ intsock_data; charcmd[5]; chararg[MA*SIZE]; //Sendwelemessage send_response(sock_control,220); //Authenticateuser if(ftserve_login(sock_control)==1){ send_response(sock_control,230); }else{ send_response(sock_control,430)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 结对创先协议书
- 留学委托协议书
- 电车保价协议书
- 男士入赘协议书
- 签约养护协议书
- 签订退房协议书
- 菲俄派遣协议书
- 意难忘王母撕掉协议书
- 电脑合伙协议书
- 环境影响协议书
- 智能教育技术驱动的个性化学习路径优化研究
- 基层治理现代化视角下“枫桥经验”的实践路径与创新研究
- 通信光缆租用协议合同书
- 2024-2025部编版小学道德与法治一年级下册期末考试卷及答案(三套)
- 医疗救助资金动态调整机制-洞察阐释
- 篮球培训报名合同协议
- 自考00061国家税收历年真题及答案
- 公共组织绩效评估-形考任务一(占10%)-国开(ZJ)-参考资料
- 冠状动脉介入诊断治疗
- 高效催化剂的开发与应用-全面剖析
- 冀少版(2024)七年级下册生物期末复习知识点填空练习题(无答案)
评论
0/150
提交评论