linux網(wǎng)絡(luò)編程課程設(shè)計_第1頁
linux網(wǎng)絡(luò)編程課程設(shè)計_第2頁
linux網(wǎng)絡(luò)編程課程設(shè)計_第3頁
linux網(wǎng)絡(luò)編程課程設(shè)計_第4頁
linux網(wǎng)絡(luò)編程課程設(shè)計_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

《Linux網(wǎng)絡(luò)編程》課程設(shè)計班級:指導(dǎo)老師:、設(shè)計背景Linux操作系統(tǒng)作為一個開源的操作系統(tǒng)被越來越多的人所應(yīng)用, 它的好處在于操作系統(tǒng)源代碼的公開化!只要是基于 GNU公約的軟件你都可以任意使用并修改它的源代碼。通過這次課程設(shè)計能更好的學(xué)習(xí)網(wǎng)絡(luò)編程知識和掌握 LINUX平臺上應(yīng)用程序設(shè)計開發(fā)的過程,將大學(xué)四年所學(xué)知識綜合運(yùn)用,為未來的工作學(xué)習(xí)打下基礎(chǔ)。二、設(shè)計目的1、學(xué)習(xí)epoll跟FTP被動模式2、掌握linux基本命令,例如ls、cd、login;3、學(xué)會如何編譯、運(yùn)行三、環(huán)境要求1、centos64位操作系統(tǒng)2、gcc編譯器四、設(shè)計原理4.1客戶端客戶端程序的主要任務(wù)有以下 3個:(1)、分析用戶輸入的命令。(2)、根據(jù)命令向服務(wù)器發(fā)出請求(3)、接受服務(wù)器返回請求的結(jié)果客戶端為用戶提供了 3種命令:(1)、get:從服務(wù)器下載文件 (2)、list:列出客戶端當(dāng)前目錄的容(3)、quit離開4.2服務(wù)器端(1)、分析請求代碼。(2)、根據(jù)請求代碼做相應(yīng)的處理(3)、等待返回結(jié)果或者應(yīng)答信息五、軟件測試結(jié)果server—Dolphiri<> :::II?查戰(zhàn)位苦國主文忤mORU,回收M占is:*,6司bCmtOS7丁的_險日172GE琥盤無動耨用nR可礎(chǔ)媒體□L0GiB曖爵mB榴禧>mscia>"tp^master_l,sorverbaozibtserveFiacrve.oV

rtserve.ctxt

mocniiasftserwe.htxr

tmpjbrtB個文14《7D.CIKE)riRTt;FtrriRTt;Ftr括川ri[rg*■四ocdkistFij^rn¥tET_Ll#Erleni[-Mt^ocaHiostclsritjll.Ate:ent1自上由.19白節(jié)j:m&ct9日to?JJvrLl.jni'ip03rt/|國仆辦hriHE;TKiGYECijEPassword.S.-tce^-Jkrgr.FHiar。getrr&omao』Ooirg±13皖力」<iajestedF餐acUmik”"FlLfpr*寸>舸匕曲電因唱Cb5rqJairarTmeett^n,^ec-je^Bdlactionsixtk-UFHlert》|■蟄找LrMt?k>zslrio?tclientJff./rtcli5ntL9S76onnected:o1k一口.「.!_.■蟄找[220Wefcoms,server『s小,.根>risdia>rrlPinre:anoriyrriodEE'ass^ord::uccm彌卜ulI附]tcienogeermaomiao:zddosrigdataconnectiori.Recuestedfileatearsuo:削Mui.tcienogeebsoei-tci-rr工量5口3:34baoa-tci-rr工量5口3:34baoa5l£;30FtserveS3£皿2hxrvejQE3E016ftscrveJT51£;3QFtseNE.ot3二QIStnot.erile513;36mia5Tli口。513:^5tmp.tHt一rw?;「一柒i■一捍.1rgtroot317Z81l「wx「用1「gtrgtBM4-TWITAT”];FQQtroot13604-rwr-r—,1rcotrwt3L4U61Lrwxr"-"-,1,rootroot2064卜mr-r'-.1rootroot21

rw-r-r.1rootroot3731Ftciont>|de-it:rtdfent六、部分主代碼#include"ftserve.h"intmain(intargc,char*argv[]){intsock_listen,sock_control,port,pid;if(argc!=2){printf("usage:./ftserveport\n");exit(0);}port=atoi(argv[1]);//createsocketif((sock_listen=socket_create(port))<0){perror("Errorcreatingsocket");exit(1);}while⑴{//waitforclientrequest//createnewsocketforcontrolconnectionif((sock_control=socket_accept(sock_listen))<0)break;//createchildprocesstodoactualfiletransferif((pid=fork())<0){perror("Errorforkingchildprocess");}elseif(pid==0){close(sock_listen);ftserve_process(sock_control);close(sock_control);exit(0);}close(sock_control);}close(sock_listen);return0;}/**Sendfilespecifiedinfilenameoverdataconnection,sendingcontrolmessageovercontrolconnectionHandlescaseofnullorinvalidfilename/voidftserve_retr(intsock_control,intsock_data,char*filename){FILE*fd=NULL;chardata[MAXSIZE];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,MAXSIZE,fd);if(num_read<0){printf("errorinfread()\n");}//sendblockif(send(sock_data,data,num_read,0)<0)

perror("errorsendingfile\n");}while(num_read>0);//sendmessage:226:closingconn,filetransfersuccessfulsend_response(sock_control,226);fclose(fd);}}/***Sendlistoffilesincurrentdirectory*overdataconnectionReturn-1onerror,0onsuccess*/intftserve_list(intsock_data,intsock_control){chardata[MAXSIZE];size_tnum_read;FILE*fd;intrs=system("ls-l|tail-n+2>tmp.txt");if(rs<0){exit(1);}fd=fopen("tmp.txt","r");if(!fd){exit(1);/*Seektothebeginningofthefile*/fseek(fd,SEEK_SET,0);send_response(sock_control,1);“startingmemset(data,0,MAXSIZE);while((num_read=fread(data,1,MAXSIZE,fd))>0){if(send(sock_data,data,num_read,0)<0){perror("err");}memset(data,0,MAXSIZE);}fclose(fd);send_response(sock_control,226); //send226return0;}/**OpendataconnectiontoclientReturns:socketfordataconnectionor-1onerror*/intftserve_start_data_conn(intsock_control){charbuf[1024];intwait,sock_data;//Waitforgo-aheadoncontrolconnif(recv(sock_control,&wait,sizeofwait,0)<0){perror("Errorwhilewaiting");return-1;//Getclientaddressstructsockaddr_inclient_addr;socklen_tlen=sizeofclient_addr;getpeername(sock_control,(structsockaddr*)&client_addr,&len);inet_ntop(AF_INET,&client_addr.sin_addr,buf,sizeof(buf));//Initiatedataconnectionwithclientif((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[MAXSIZE];charpassword[MAXSIZE];char*pch;charbuf[MAXSIZE];char*line=NULL;size_tnum_read;size_tlen=0;FILE*fd;intauth=0;fd=fopen(".auth","r");if(fd==NULL){perror("filenotfound");exit(1);}while((num_read=getline(&line,&len,fd))!=-1){memset(buf,0,MAXSIZE);strcpy(buf,line);pch=strtok(buf,"");strcpy(username,pch);if(pch!=NULL){pch=strtok(NULL,"");strcpy(password,pch);}//removeendoflineandwhitespacetrimstr(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[MAXSIZE];charuser[MAXSIZE];charpass[MAXSIZE];memset(user,0,MAXSIZE);memset(pass,0,MAXSIZE);memset(buf,0,MAXSIZE);//Waittorecieveusernameif((recv_data(sock_control,buf,sizeof(buf)))==-1){perror("recverror\n");exit(1);}inti=5;intn=0;while(buf[i]!=0)user[n++]=buf[i++];//tellclientwe'rereadyforpasswordsend_response(sock_control,331);//Waittorecievepasswordmemset(buf,0,MAXSIZE);if((recv_data(sock_control,buf,sizeof(buf)))==-1){perror("recverror\n");exit(1);}i=5;n=0;while(buf[i]!=0){pass[n++]=buf[i++];}return(ftserve_check_user(user,pass));}WaitforcommandfromclientandsendresponseReturnsresponsecode*/intftserve_recv_cmd(intsock_control,char*cmd,char*arg){intrc=200;charbuffer[MAXSIZE];memset(buffer,0,MAXSIZE);memset(cmd,0,5);memset(arg,0,MAXSIZE);//Waittorecievecommandif((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{//invalidcommandrc=502;}send_response(sock_control,rc);returnrc;}/***Childprocesshandlesconnectiontoclient*/voidftserve_process(intsock_control){intsock_data;charcmd[5];chararg[MAXSIZE];//Sendwelcomemessagesend_response(sock_control,220);//Aut

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論