版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
可編犧可條改.歡迎下拔可編犧可條改.歡迎下拔可編犧可條改.歡迎下拔可編犧可條改.歡迎下拔議松板Linux下基于TCP/IP協(xié)議的文件傳輸程序【設計目的】通過LinuxC編程,設計一個基于TCP/IP的文件傳輸系統(tǒng),實現(xiàn)網絡文件的收發(fā)【設計環(huán)境】Ubuntu12.04【設計方案】文件讀寫任意文件都可以二逬制的方式進行讀寫,為了實現(xiàn)任意文件類型的傳輸,在讀寫文件的過程中.必須采用二逬制的讀寫方式。傳輸協(xié)議為了保證數(shù)據的正確性.文件傳輸需要采用一種可靠的傳輸協(xié)議。UDP協(xié)議實現(xiàn)比較簡單.但UDP面向無連接,傳輸過程中,會出現(xiàn)丟包的情況,導致數(shù)據發(fā)送失敗。故采用面向連接的TCP/IP協(xié)議.防止傳輸過程中的數(shù)據丟失的情況。大文件的傳輸對于比較大的文件,應該進行分包操作,以防止占用過多的內春,導致文件發(fā)送失敗?!驹O計流程】如圖1所示,服務器程序作為文件的發(fā)送方。首先,服務器端輸入要發(fā)送的文件。然后,創(chuàng)建一個流式套接字(SOCK_STREAM).進行綁定。綁定成功后,執(zhí)行監(jiān)聽,當有客戶發(fā)送連接請求,執(zhí)行AcceptO.接收來自客戶端的請求。連接建立后,首先服務器向客服端發(fā)送的文件的文件名及擴展名等信息。信息發(fā)送完畢,服務器萬將待發(fā)送的數(shù)據讀入緩沖區(qū),通過套接字將數(shù)據發(fā)送出去。發(fā)送完成后退出,并顯示發(fā)送完成的信息。介問協(xié)議模板介問協(xié)議模板可褊旳可侈改?歡迎下鐵可褊旳可侈改?歡迎下鐵介問協(xié)議模板介問協(xié)議模板可褊旳可侈改?歡迎下鐵可褊旳可侈改?歡迎下鐵圖1服務器流程圖如圖2所示.客戶端程序完成文件的接收操作。首先.創(chuàng)建一個流式套接字。套接字創(chuàng)建成功后,對該套接字進行綁定。綁定成功后,向服務器方發(fā)送連接i青求。連接成功后,首先,接收服務器發(fā)送的文件信息。接收成功后.幵始數(shù)據的接收。文件接收完畢,顯示文件已接收完成。
圖2客戶端流程圖【設計測試】了驗證設計的正確性.在Ubimui12.04系統(tǒng)上對可執(zhí)行文件逬行了回環(huán)測試。步驟如下:(1)測試文件a.txt及服務器端文件源fileserver.c和可執(zhí)行文件fileserver(2)客戶謊源文件及可執(zhí)行文件?O?dbc設備1?optabc4TQ很素<incl■incl?intixrr/n…一40GB文件系…□工作空間計口機■fileclientI辰主文件|J桌面舊視頻[W圖片匣文檔lES下琵QB咅樂2文件系E回收站網絡?廠root@>Compaq:/opt/abcroot^Compaq:-#cd/opt/abc/root@conpaq:/opt/abcffgcc?ofllecllentftlecltent?cfilecHent.c:在函數(shù)Fain"中:ftiedtent.c:79:6:警告:格式expectsargumentoftyperchar*1,butargument3hastype"char[-wfornat]ftieclient.c:106:6:蜚告:格式Wexpectsargumentoftype"choc*#,butargu'ment3hastype*char**rootleompaq:/opt/abc#£9[-Wfornat](3)執(zhí)行服務器端文件filcscrvcr并輸入要傳輸?shù)奈募m.等待客戶端連接設各J30GB文件系□40CB文件系□工作空間計算機aoptdbc4TQ灣家a 1◎?he、 1*itclabea.txtfileserverfileserve「.t [?4廣「oot@Compaq:/opt匸京五J]視頻匿圖片S3文檔|上咅樂2文件彳3,回收沖網絡root@Conpaq:-#cd/opt/root@Conpaq:/optffgcc?oftleserverftleserve「?cfileserver.c:在函數(shù)FaW中:fileserver.c:20:6:警告:格式'%s‘expectsargumentoftyperchar,butargument2hastype"char(*)[512]*[-Wfornat]root@conpaq:/optff>/ftleserverPleaseinputthefilenaneyouwanatosend:a?txt(4)執(zhí)行客戶瀟文件fileclient.如果不輸入IP地址將顯示提示ibc設各□30GB文件系…二40GB文件系???匸:工作空間計算機玄王文件b皐宜optabc丄文件系t回收站網絡金瀏覽網?root@Compaq:/opt/bbcCompaq:?祥cd/opt/abc/root@Compaq:/opt/abc#gcc-ofileclientfileclient.cftlecltent.c:在函數(shù)5a5'中:Iftlecltent.c:79:6:警吿:IS式expectsargumentoftype*char,butargument3hastype*char[-Wformat]ftlecltent.c:106:6:蚩告;格式'篇s'expectsargumentoftype*charw,,butargurent3hastypefchar***[?wformat]root^Compaq:/opt/abc#?/fileclientUsage:./ftlecltent<IPAddress〉root^Compaq:/opt/abc#|(5)執(zhí)行客戶瀟文件后.輸入完整命令.文件傳輸文件完成(6)看到服務器端也顯示文件傳輸完成0optca 土NAoptabcQ鏤索二40GB文件系…□工作空間計■機aabcdsfsffileservera.txt?)aitci
nrcl1“云」fileserver.cI?主文件耳匸i妄面反視頻畫圖片0文檔IQ下航4冒樂_文件系好J回收站I悶絡?0@「oot@Compaq:/optroot@Compaq:-#cd/opt/root@Compaq:/opt#gcc-ofileserverfileserve「?cftleserver.c:在函數(shù)5atn'中:ftieserver.c:20:6:曾告:格式<%sfexpectsargumentoftype*char,butargurent2hastype*charC*)[512]*[-Wfornat]root^Compaq:/opt??/ftleserverPleaseinputthefilenameyouwanatosend:a?txtftieblocklength:10TransferftiefintshedI議模板議模板可褊旳可侈改?歡迎下鐵可褊旳可侈改?歡迎下鐵議模板議模板輸犧可侈改?歡迎下鐵輸犧可侈改?歡迎下鐵服務器源碼:#include<stdio.h>#include<stdlib.h>#includc<unistd.h>#includc<string.h>#include<sys/types.h>include<sys/stat.h>include<sys/socket.h>#include<netinet/in.h>#definePORT6000#defineLISTENQ20#defineBUFFSIZE4096#dcfineHLE.NAME_MAX_SIZE512intmain(intargc,char**argv[]){//輸入文件名稱charfilename[FILE_NAME_MAX_SIZE];bzcro(filcnamc.FILE_NAME_MAX_SIZE);printf(NPleaseinputthefilenameyouwanatosend:");scanf(u%sM,&filename);getchar();〃設置一個socket地址結構intsockfd.connfd;structsockaddr_insvraddr.clicntaddr:bzero(&svraddr.sizcof(svraddij);//把一段內存區(qū)的內容全部設置為0svraddr.sin_family=AF_INET;svraddr.sin_addr.s_addr=htonl(INADDR_ANY);svraddr.sin_port=htons(PORT);//創(chuàng)建用于internet的流協(xié)議(TCP)sockctsockfd=socket(AF_INETSOCK_STREAM.O);if(sockfd<0){pcrror(HsocketM);exit(l);}〃把socket和socket地址結構綁定if(bind(sockfd,(structsockaddr*)&svraddnsizeof(svraddr))<0)perror(HbindM);exit(l);}〃監(jiān)聽if(listen(sockfd,LISTENQ)<0){perror(MlistenH);exit(l);}whilc(l)//服務器端一直運行{socklen_tIength=sizeof(clientaddr);〃等待請求connfd=accept(sockfd,(stnictsockaddr*)&clientaddi\&length);if(connfd<0){perror(Hconnectu);exit(l);〃發(fā)送文件信息charbufT[BUFFSIZE];intcount;bzero(buff,BUFFSIZE);strncpy(buff,filename.strlen(filename)>HLE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen(filename));count=send(connfd,buff.BUFFSIZE,0);if(count<0){perror(MSendfileiniformationM);exit(l);}〃讀取文件并發(fā)送文件FILE*fd=fopen(fiIename/,rbH);if(fd==NULL){printf(uFile:%snotfound!\1T,filename);}else{bzero(buff.BUFFSIZE);intfile_block_length=0;while((file_block」cngth=frcad(buff.sizcof(cha"BUFFSIZE.fd))>0){printf(Mfile_bIock_length:%d\n,\file_blockJength);if(send(connfd,buff,file_blockJength.O)<0){perror(HSendH);exit(l);}bzero(buff.BUFFSIZE);}fclose(fd);printf(HTransferfilefinished}close(connfd);}closc(sockfd);//關閉socketreturn0;}客戶謊源碼:include<stdio.h>#includc<stdlib.h>#includc<unistd.h>#includc<string.h>#include<sys/types.h>#include<sys/stat.h>#includc<sys/socket.h>#include<netinet/in.h>#dcfinePORT6000#dcfineLISTENQ20#dcfineBUFFSIZE4096#dcfineHLE_NAME_MAX_SIZE512intmain(intargc,char**argv[]){intclientfd;if(argc!=2)〃判斷參數(shù)是否完整議模板議模板可褊旳可侈改?歡迎下鐵可褊旳可侈改?歡迎下鐵議模板議模板可褊旳可侈改?歡迎下鐵可褊旳可侈改?歡迎下鐵議模板議模板歡迎下鐵歡迎下鐵fprintf(stderr/Usage:Jfileclient<IP_Address>\nM);exit(l);}structsockaddr_inclientaddr;bzero(&clicntaddr.sizeof(clientaddr));clientaddr.sin_family=AF_INET:clientaddr.sin_addr.s_addr=htons(INADDR_ANY)7/INADDR_ANY表示自動獲取本機地址clientaddr.sin_port=htons(0);//0表示讓系統(tǒng)自動分配一個空閑端口〃創(chuàng)建用于internet的流協(xié)議(TCP)sockct,用clientfd代表客戶機socketclientfd=socket(AFJNET,SOCK_STREAM.O);if(clientfd<O){perror(”socket");exit(l);}〃把客戶機的socket和客戶機的socket地址結構聯(lián)系起來if(bind(clientfdXstructsockaddr*)&clicntaddr.sizcof(clicmaddr))vO){perror(HbindM);exit(l);}〃設置一個socket地址結構體structsockaddr_insvraddr;bzero(&svraddr,sizeof(svraddr));if(inet_aton(argv(1].&svraddr.sin_addr)==O)//IP地址來自程序的參數(shù){pcrror(Hinet_atonH);exit(l);}svraddr.sin_family=AF_INET;svraddr.sin_port=htons(PORT);socklen_tsvraddrlen=sizeof(svraddr);〃向服務器發(fā)起連接,連接成功后client_socket代表了客戶機和服務器的一個socket連接if(connect(clientfd,(structsockaddr*)&svraddr,svraddrIen)<0){perror(HconnectH);exit(l);}〃接收文件信息charbuff[BUFFSIZE];charfilename[FILE.NAME_MAX_SIZE];bzero(fil
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度教育信息化平臺建設與運營合同5篇
- 二零二五年度畜牧養(yǎng)殖廢棄物處理設施運營管理合同3篇
- 2025合同模板舞臺燈光音響租賃服務合同范本
- 二零二五年度草原禁牧與草原生態(tài)環(huán)境修復與保護合同3篇
- 2025年度個人文物抵押貸款合同范本
- 2025年度出租車租賃合同范本(含智能調度系統(tǒng))2篇
- 二零二五年度農產品供應鏈承包商質量追溯擔保合同3篇
- 二零二五年度農業(yè)園區(qū)場地租賃及農業(yè)技術服務協(xié)議3篇
- 二零二五年度酒店客房消毒承包協(xié)議4篇
- 2025年度高新技術有限責任公司股東權益保障協(xié)議4篇
- 紀委辦案安全培訓課件
- 超市連鎖行業(yè)招商策劃
- 醫(yī)藥高等數(shù)學智慧樹知到課后章節(jié)答案2023年下浙江中醫(yī)藥大學
- 城市道路智慧路燈項目 投標方案(技術標)
- 初中英語-Unit2 My dream job(writing)教學設計學情分析教材分析課后反思
- 【公司利潤質量研究國內外文獻綜述3400字】
- 工行全國地區(qū)碼
- 新疆2022年中考物理試卷及答案
- 地暖工程監(jiān)理實施細則
- 頂部板式吊耳計算HGT-20574-2018
- 《內證觀察筆記》
評論
0/150
提交評論