版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45004-2024鋼鐵行業(yè)低碳企業(yè)評價指南
- 電工電子技術(shù)(第3版) 課件 5.5 共集電極放大電路
- 銀行內(nèi)部審計報告評價制度
- 銀行合規(guī)管理制度調(diào)整
- 采購物資采購價格監(jiān)控與調(diào)整制度
- 房屋轉(zhuǎn)租簡單合同(35篇)
- 《銷售基本禮儀培訓(xùn)》課件
- 榮譽(yù)升旗手演講稿(32篇)
- 《保險性質(zhì)起源》課件
- 八年級英語EducationalvisitsWriting課件
- 5G-無線網(wǎng)絡(luò)規(guī)劃概述課件
- ICT基本原理-課件
- 創(chuàng)新思維與創(chuàng)業(yè)實驗-東南大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 電網(wǎng)檢修工程預(yù)算定額
- 六年級上冊英語說課稿-Unit6 There are four seasons in a year Lesson 35-36|人教(精通)
- 大班語言故事吉吉和磨磨
- 裝配式建筑混凝土結(jié)構(gòu)施工技術(shù)PPT完整全套教學(xué)課件
- 筆試考試:HSK筆試(二級)真題模擬匯編(共499題)
- 愛、金錢和孩子:育兒經(jīng)濟(jì)學(xué)
- 小學(xué)音樂-拍皮球教學(xué)設(shè)計學(xué)情分析教材分析課后反思
- 年廣東省檔案工作人員崗位培訓(xùn)班試題
評論
0/150
提交評論