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

下載本文檔

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

文檔簡(jiǎn)介

1、 Linux 網(wǎng)絡(luò)編程課程設(shè)計(jì)班級(jí):姓名:指導(dǎo)老師:客戶端為用戶提供了 3 種命令:(1 )、get:從服務(wù)器下載文件(2 )、list:列出客戶端、設(shè)計(jì)背景Linux 操作系統(tǒng)作為一個(gè)開源的操作系統(tǒng)被越來(lái)越多的人所應(yīng)用,它的好處在于操作系統(tǒng)源代碼的公開化!只要是基于 GNU 公約的軟件你都可以任意使用并修改它的源代碼。通過(guò)這次課程設(shè)計(jì)能更好的學(xué)習(xí)網(wǎng)絡(luò)編程知識(shí)和掌握LINUX 平臺(tái)上應(yīng)用程序設(shè)計(jì)開發(fā)的過(guò)程,將大學(xué)四年所學(xué)知識(shí)綜合運(yùn)用,為未來(lái)的工作學(xué)習(xí)打下基礎(chǔ)。二、設(shè)計(jì)目的1、 學(xué)習(xí) epoll 跟 FTP 被動(dòng)模式2、 掌握 linux 基本命令,例如 Is、cd、login ;3、 學(xué)會(huì)如何

2、編譯、運(yùn)行三、環(huán)境要求1、 centos 64 位操作系統(tǒng)2、 gcc 編譯器四、設(shè)計(jì)原理4、1客戶端客戶端程序的主要任務(wù)有以下3 個(gè):(1 )、分析用戶輸入的命令。(2 )、根據(jù)命令向服務(wù)器發(fā)出請(qǐng)求B十丈件(TDR KBh(3 )、接受服務(wù)器返回請(qǐng)求的結(jié)果B十丈件(TDR KBh當(dāng)前目錄的內(nèi)容(3)、quit 離開4.2 服務(wù)器端(1 )、分析請(qǐng)求代碼。(2 )、根據(jù)請(qǐng)求代碼做相應(yīng)的處理(3 )、等待返回結(jié)果或者應(yīng)答信息五、軟件測(cè)試結(jié)果# IE? 25幾査找 預(yù) fikg*阿粘server OolphJnLX ftp-masserverg 自揑倆更更拆為金桂腳.根 neda ftp-rrts

3、sla-.! ttent回叱txttxlJI I 1 e牛丈忡(7S-1 KE :三T丈&壬u Cantos :心_UJ二_L片龍射就tOB可味建俸 蟲1出畫1!3近舅rli-ir,.-10i- lrLrootwlocahost cient In ./rtdsnt SS76 onnsctecl toL27.0.DJ.220 WelccrrpTsarYer raddy.J占ms MoryinoLeJassiMTd:六、部分主代碼#i nclude ftserve.hint main (i nt argc, char *argv)int sock_liste n, so

4、ck_c on trol, port, pid;if (argc != 2) prin tf(usage: ./ftserve portn);exit(O);txrtrlen: .SuctKSfultclenc) ge(rzzb _C5ing da:己:onnecflor. requesteduziem; gat two226 Ccei1iq iizi:u conrtiLUor. Ftijuut-ttjdtclerit) 1st-r*f-rr. 1 rq?QlKt G 1月 一檔Trr-* rwt root 31720 1月-rWrTwrvr- 1rcat rcoC乜504 4月許心rrvr-

5、 1out roo: L3E6 4月-rv*- r-r, 1 rc?ot root 314J6 1月-rwwv-rw. Jroot root 266 4月rw- r -r 1 root root 2 1月rw-r -r. 1root root 373 1月Hile action successr.ji.Ale adtlonSUCCBSSFLJ.5 1334 bcczi5 l:30 Ftserve23 SOLE tscrvexS3 30L6 ftserve.h5 LE;R Ftseree23 301G Totefle5 LJ;3S miaotri口。Idierit;gen:port = atoi

6、(argv1);/ create socketif (sock_liste n = socket_create(port) 0 ) perror(Error creati ngsocket);exit(1);while(1) / wait for clie nt request/ create new socket for con trol connectionif (sock_c on trol = socket_accept(sock_liste n) 0 ) break;/ create child process to do actual file tran sfer if (pid

7、= fork() 0)perror(Error forki ng child process); else if (pid = 0) close(sock_liste n);ftserve_process(sock_c on trol);close(sock_c on trol); exit(O);close(sock_c on trol);close(sock_liste n);return 0;FILE* fd = NULL;char dataMAXSIZE;size_t nu m_read;fd = fope n( file name, r);if (!fd) / send error

8、code (550 Requested acti on not take n) sen d_resp onse(sock_c on trol, 550); else / send okay (150 File status okay)sen d_resp on se(sock_c on trol, 150);do num _read = fread(data, 1, MAXSIZE, fd);if (nu m_read 0) prin tf(error in fread()n);/ send blockif (se nd(sock_data, data, nu m_read, 0) 0);/

9、send message: 226: clos ing conn, file tran sfer successful send_resp on se(sock_c on trol, 226);fclose(fd);/* Send list of files in curre nt directory* over data connection* Retur n -1 on error, 0 on success*/int ftserve_list(i nt sock_data, int sock_c on trol) char dataMAXSIZE;size_t nu m_read;FIL

10、E* fd;int rs = system(ls -l | tail -n+2 tmp.txt);if ( rs 0) if (se nd(sock_data, data, nu m_read, 0) 0) perror(err);memset(data, 0, MAXSIZE);fclose(fd);sen d_resp on se(sock_c on trol, 226);/ send 226return 0;/* Open data connection to clie nt* Retur ns: socket for data connectionor -1 on error*/int

11、 ftserve_start_data_c onn (i nt sock_c on trol)char buf1024;int wait, sock_data;/ Wait for go-ahead on con trol connif (recv(sock_c on trol, &wait, sizeof wait, 0) 0 ) perror(Error while waiti ng);return -1;/ Get clie nt addressstruct sockaddr_ in clie nt_addr;sockle n_t len = sizeof clie nt_add

12、r;getpeername(sock_control, (struct sockaddr*)&client_addr, &len);inet_ntop(AF_INET, &client_addr.sin_addr, buf, sizeof(buf);/In itiate data connection with clie ntif (sock_data = socket_co nn ect(CLIENT_PORT_ID, buf) 0)return -1;retur n sock_data;/* Authenticate a users credentials* Ret

13、urn 1 if authenticated, 0 if not*/ int ftserve_check_user(char*user, char*pass) char usernameMAXSIZE;char passwordMAXSIZE;char *pch;char bufMAXSIZE;char *li ne = NULL;size_t nu m_read;size_t le n = 0;FILE* fd;int auth = 0;fd = fope n(.auth, r);if (fd = NULL) perror(file not foun d);exit(1);while (nu

14、 m_read = getl ine(&line, &len, fd) != -1) memset(buf, 0,MAXSIZE);strcpy(buf, li ne);pch = strtok (buf,);strcpy(user name, pch);if (pch != NULL) pch = strtok (NULL,);strcpy(password, pch);/ remove end of line and whitespace trimstr(password, (in t)strlen( password);if (strcmp(user,user name)

15、=O) & (strcmp(pass,password)=0)auth = 1; break;free(l in e);fclose(fd);return auth;* Log in conn ected clie nt*/int ftserve_logi n(i nt sock_c on trol)char bufMAXSIZE;char userMAXSIZE;char passMAXSIZE;memset(user, 0, MAXSIZE);memset(pass, 0, MAXSIZE);memset(buf, 0, MAXSIZE);/ Wait to recieve use

16、r nameif ( (recv_data(sock_c on trol, buf, sizeof(buf) ) = -1) perror(recv errorn);exit(1);int i = 5;int n = 0;while (bufi != 0)user n+ = bufi+;/ tell clie nt were ready for password sen d_resp on se(sock_c on trol,331);/ Wait to recieve passwordmemset(buf, 0, MAXSIZE);if ( (recv_data(sock_c on trol

17、, buf, sizeof(buf) ) = -1) perror(recv error n);exit(1);i = 5;n = 0;while (bufi != 0) pass n+ = bufi+;retur n (ftserve_check_user(user, pass);* Wait for comma nd from clie nt and* send resp onse* Retur ns resp onse code*/int ftserve_recv_cmd(i nt sock_c on trol, char*cmd, char*arg) int rc = 200;char

18、 bufferMAXSIZE;memset(buffer, 0, MAXSIZE);memset(cmd, 0, 5);memset(arg, 0, MAXSIZE);/ Wait to recieve comma ndif (recv_data(sock_c on trol, buffer, sizeof(buffer) ) = -1) perror(recverror n);return -1;strn cpy(cmd, buffer, 4); char *tmp = buffer + 5; strcpy(arg, tmp);if (strcmp(cmd, QUIT)=0) rc = 22

19、1; else if(strcmp(cmd, USER)=0) | (strcmp(cmd, PASS)=0) |(strcmp(cmd, LIST)=O) | (strcmp(cmd, RETR)=O) rc = 200; else /in valid comma ndrc = 502;sen d_resp on se(sock_c on trol, rc); return rc;/* Child process han dles conn ecti on to clie nt*/void ftserve_process(i nt sock_c on trol)int sock_data;c

20、har cmd5;char argMAXSIZE;/ Send welcome messagesen d_resp on se(sock_c on trol, 220);/ Authe nticate userif (ftserve_logi n( sock_c on trol) = 1) sen d_resp on se(sock_c on trol,230); else sen d_resp on se(sock_c on trol, 430); exit(0);while (1) / Wait for comma nd int rc = ftserve_recv_cmd(sock_c on trol, cmd,arg);if (rc 0) | (rc = 221) break; if (rc = 200 ) / Ope n data c

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論