Linux下基于socket的文件傳輸程序設(shè)計課程設(shè)計報告_第1頁
Linux下基于socket的文件傳輸程序設(shè)計課程設(shè)計報告_第2頁
Linux下基于socket的文件傳輸程序設(shè)計課程設(shè)計報告_第3頁
Linux下基于socket的文件傳輸程序設(shè)計課程設(shè)計報告_第4頁
Linux下基于socket的文件傳輸程序設(shè)計課程設(shè)計報告_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、重慶大學(xué)課程設(shè)計報告課程設(shè)計題目: Linux下基于socket的文件傳輸程序設(shè)計 學(xué) 院: 計算機學(xué)院 專業(yè)班級: 網(wǎng)絡(luò)工程一班 年 級: 2021 級 姓 名: 學(xué) 號: 完成時間: 2021 年 6 月 21 日成 績: 指導(dǎo)教師: 重慶大學(xué)教務(wù)處制課程設(shè)計指導(dǎo)教師評定成績表工程分值優(yōu)秀(100 x90)良好(90 x80)中等(80 x70)及格(70 x60)不及格(xd_name, .) = 0) | (strcmp(myitem-d_name, .) = 0) continue;strcpy(buf, myitem-d_name);send(connfd, buf, N, 0);

2、closedir(mydir);return;C.下載文件:void ProcessGet(int connfd, char buf) /client下載函數(shù),返回client請求的文件int fd, nbyte;if (fd = open(buf+1, O_RDONLY) 0)send(connfd, buf, nbyte, 0);close(fd);return;D.上傳文件:void ProcessPut(int connfd, char buf) /接收client上傳的文件int fd, nbyte;if (fd = open(buf+1, O_WRONLY|O_CREAT|O_TR

3、UNC, 0666) 0)write(fd, buf, nbyte);close(fd);return;void rm_file( char command) /刪除文件 char cmdline256; sprintf(cmdline, rm -f %s,command+3); system(cmdline); printf(已刪除%s,command+3); void touch_file( char command) /創(chuàng)立文件 char cmdline256; sprintf(cmdline, touch %s,command+3); system(cmdline); printf(已

4、創(chuàng)立%s,command+3); void move_file(char src_file,char des_file) /mv函數(shù)的實現(xiàn) char cmdline256; sprintf(cmdline,mv %s %s ,src_file,des_file); system(cmdline); void copy_file(char src_file,char des_file) /文件拷貝 char cmdline256; sprintf(cmdline,cp %s %s ,src_file,des_file); system(cmdline); 客戶端打印列表:void Process

5、List(struct sockaddr_in server_addr)int sockfd, nbyte;char bufN;if (sockfd = socket(PF_INET, SOCK_STREAM, 0) 0)printf(獲取失敗n);return;if (connect(sockfd, (SA *)&server_addr, sizeof(server_addr) 0)printf(連接server失敗n);goto ERROR_1;strcpy(buf, L);send(sockfd, buf, N, 0);printf(server目錄下文件列表:n);while (nby

6、te = recv(sockfd, buf, N, 0) != 0)printf(%sn, buf);ERROR_1:close(sockfd);return;下載文件:void ProcessGet(struct sockaddr_in server_addr, char command)int sockfd, nbyte, fd;char bufN;if (sockfd = socket(PF_INET, SOCK_STREAM, 0) 0)printf(下載失敗n);return;if (connect(sockfd, (SA *)&server_addr, sizeof(server_

7、addr) 0)printf(連接server失敗n);goto ERROR_2;sprintf(buf, G%s, command+4);send(sockfd, buf, N, 0);recv(sockfd, buf, N, 0);if (buf0 = N) / no such fileprintf( server上不存在此文件!n);goto ERROR_2;if (fd = open(command+4, O_WRONLY|O_CREAT|O_TRUNC, 0666) 0)write(fd, buf, nbyte);printf(下載文件成功n);close(fd);ERROR_2:c

8、lose(sockfd);return;上傳文件:void ProcessPut(struct sockaddr_in server_addr, char command)int sockfd, fd, nbyte;char bufN;if (sockfd = socket(PF_INET, SOCK_STREAM, 0) 0)printf(上傳失敗n);return;if (connect(sockfd, (SA *)&server_addr, sizeof(server_addr) 0)printf(連接server失敗n);goto ERROR_3;if (fd = open(comma

9、nd+4, O_RDONLY) 0)send(sockfd, buf, nbyte, 0);printf(上傳文件成功n);close(fd);ERROR_3:close(sockfd);return;調(diào)試分析與測試結(jié)果效勞器端 效勞器端初始狀態(tài):3.1.2 對效勞器端進行文件管理:3.1.3 拷貝:執(zhí)行結(jié)果:將文件b拷貝生成文件c3.1.4列出效勞器端文件列表: 3.1.5刪除文件:刪除文件之后,再查看效勞器端目錄下文件列表:由上圖可以發(fā)現(xiàn)2.txt文件已經(jīng)被刪除。3.1.6創(chuàng)立文件:由上圖,先創(chuàng)立3.txt的文件,再查看效勞器端目錄下文件列表,發(fā)現(xiàn)文件創(chuàng)立成功。3.1.7重命名文件:將文件

10、3.txt重命名為2.txt:再查看文件列表:由上圖發(fā)現(xiàn),3.txt已更名為2.txt。3.1.8移動文件:運行成功后,查看目標(biāo)目錄,發(fā)現(xiàn)2.txt已經(jīng)成功移動到目標(biāo)目錄。3.1.9退出文件管理并監(jiān)聽客戶端:客戶端3.2.1查看客戶端文件列表:3.2.2查看效勞器端文件列表:3.2.3從效勞器端下載文件到客戶端:下載成功之后,查看客戶端文件目錄,發(fā)現(xiàn)Linux.pdf出現(xiàn)在客戶端文件目錄中。3.2.4從客戶端上傳文件到效勞器端:上傳成功之后,查看客戶端文件目錄,發(fā)現(xiàn)5.txt出現(xiàn)在效勞器端文件目錄中。更改文件目錄:移動5.txt文件后,查看客戶端文件列表,發(fā)現(xiàn)其已不在列表中,再查看移動的目標(biāo)目

11、錄:發(fā)現(xiàn)文件已在相應(yīng)文件夾中。設(shè)計總結(jié)這次課程設(shè)計可謂收獲頗大,首先從一開始對Linux 編程只有淺薄的認(rèn)識,到做完實驗后有了一定程度的了解,并能夠進行簡單的程序設(shè)計和編寫。如果沒有這次實驗,我想我很難有時機去接觸從而進一步熟悉Linux 這個操作系統(tǒng)以及在Linux 下的編程。通過實驗我認(rèn)識到了系統(tǒng)調(diào)用的實現(xiàn)原理,系統(tǒng)信息和狀態(tài)的讀取,讓我從中學(xué)到了不少Linux的知識。在實驗的過程中,我們特別是對Linux下通過Socket來實現(xiàn)文件傳輸有了更深的認(rèn)識,我想這是我們這次課程設(shè)計中最大的收獲。效勞器的工作流程是這樣的:首先調(diào)用socket函數(shù)創(chuàng)立一個Socket,然后調(diào)用bind函數(shù)將其與本

12、機地址以及一個本地端口號綁定,然后調(diào)用 listen在相應(yīng)的socket上監(jiān)聽,當(dāng)accpet接收到一個連接效勞請求時,將生成一個新的socket。效勞器顯示該客戶機的IP地址,并通過 新的socket向客戶端發(fā)送字符串。最后關(guān)閉該socket。在關(guān)于調(diào)用多線程實現(xiàn)效勞器端同時與多個客戶端進行操作也讓我們有了更多更加深入的體會。代碼實例中的fork()函數(shù)生成一個子進程來處理數(shù)據(jù)傳輸局部,fork()語句對于子進程返回的值為0。所以包含fork函數(shù)的if語句是子進程代碼局部,它與if語句后面的父進程代碼局部是并發(fā)執(zhí)行的。實驗過程中遇到了不少問題,主要是對Linux 下的編程環(huán)境不熟悉,一開始對于編譯命令就相當(dāng)?shù)姆锤?怎么這么長的命令對于終端的使用也是很不滿意,覺得編起來很不方便,當(dāng)然我不

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論