




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、計算機網(wǎng)絡課程設計報告題目:文件傳輸協(xié)議的設計與實現(xiàn) 學院:信息工程學院 班級:雙學位13級 學號:2012015220 姓名:任志永目錄1.課程設計目的和要求2.背景知識3.課程設計分析4.程序清單5.運行結(jié)果6.總結(jié)1. 課程設計目的和要求文件傳輸是各種計算機的網(wǎng)絡的基本功能,文件傳送協(xié)議是一種最基本的應用層協(xié)議。它是按照客戶或服務器模式進行的工作,提供交式的訪問。是INTERNRT使用最廣泛的協(xié)議之一。以及深入了解計算機網(wǎng)絡是建立在TCP/IP網(wǎng)絡體系結(jié)構(gòu)上。用 socket 編程接口編寫倆個程序,分別為客戶程序和服務器程序1 掌握TCP/IP 網(wǎng)絡應用程序基本的設計方法;2 用sock
2、et 編程接口編寫兩個程序,分別為客戶程序(client.c)和服務器程序(server.c);3 撰寫課程設計說明書。裝訂后的課程設計說明書不少于10面(含封面、任務書、目錄、正文、參考文獻、成績評定表、封底)。2. 背景知識第一個FTP的RFC由A.K.Bhushan 在1971年提出,同時由MIT與Harvard實驗實現(xiàn),RFC 172提供了主機間文件傳輸?shù)囊粋€用戶級協(xié)議。長期發(fā)展過程由于底層協(xié)議從NCP改變?yōu)門CP,RFC765定義了采用TCP的FCP. FTP協(xié)議在今天已經(jīng)發(fā)展成熟,應用也越來越廣很多開發(fā)的比較成熟的FTP客戶端軟件已經(jīng)得到了廣泛的應用.3. 課程設計分析 Serve
3、r端 Client端創(chuàng)建ServerSocket對象,在某端口提供監(jiān)聽服務Client端 等待來自Client端的服務請求 接受Client端的請求,用返回的 創(chuàng)建Socket對象,向Server Socket建立連接 的監(jiān)聽端口請求 通過向Socket中讀寫數(shù)據(jù)來 通過向新的Socket中讀寫數(shù)與Client端通信 據(jù)來與Server端通信關閉Socket,結(jié)束與Server端的通信 關閉Socket,結(jié)束與當前 Client的通信,等待其他請求關閉ServerSocket對象,結(jié)束監(jiān)聽服務4.程序清單:1. 服務器源代碼:#include <Winsock2.h>#includ
4、e <stdio.h>#include <iostream>using namespace std;#pragma comment(lib, "wsock32.lib")#define PORT 4523char buf_send1024;char buf_rec1024;SOCKET sockSrv;/socket初始化DWORD CreateSocket()WSADATA WSAData;/WSADATA結(jié)構(gòu)被用來保存函數(shù)WSAStartup返回的Windows Sockets初始化信息if(WSAStartup(MAKEWORD(2,2),&a
5、mp;WSAData)!=0)/WSAStartup完成winsock的初始化printf("socket initialize failed!n");return (-1);sockSrv=socket(AF_INET,SOCK_STREAM,0);/定義為面向連接的,返回值送給sockSrvif(sockSrv=SOCKET_ERROR)printf("socket create failed ! n");WSACleanup();/中止Windows Sockets DLL的使用return(-1);SOCKADDR_IN addrSrv;/TCP
6、/IP使用SOCKADDR_IN 定義地址addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);/計算機IP地址addrSrv.sin_port=htons(PORT);/協(xié)議端口號addrSrv.sin_family=AF_INET;/地址所屬協(xié)議簇/綁定端口if(bind(sockSrv,(struct sockaddr FAR *)&addrSrv,sizeof(addrSrv)=SOCKET_ERROR)printf("Bind Error");return(-1);return (1);int SendFileRec
7、ord(SOCKET datatcps,WIN32_FIND_DATA *pfd)/用于回復給客戶端char filerecordMAX_PATH+32;FILETIME ft;FileTimeToLocalFileTime(&pfd->ftLastWriteTime,&ft);/將一個FILETIME結(jié)構(gòu)轉(zhuǎn)換成本地時間 SYSTEMTIME lastwtime;/系統(tǒng)時間FileTimeToSystemTime(&ft,&lastwtime);/根據(jù)一個FILETIME結(jié)構(gòu)的內(nèi)容,裝載一個SYSTEMTIME結(jié)構(gòu) char *dir=pfd->dw
8、FileAttributes&FILE_ATTRIBUTE_DIRECTORY?"<DIR>":" "sprintf(filerecord,"%04d-%02d-%02d %02d:%02d %5s %10d %-20sn", lastwtime.wYear,lastwtime.wMonth,lastwtime.wDay,lastwtime.wHour,lastwtime.wMinute,dir,pfd->nFileSizeLow,pfd->cFileName);if(send(datatcps,fil
9、erecord,strlen(filerecord),0)=SOCKET_ERROR)/發(fā)送回復失敗printf("Error occurs when sending file list!n");return 0;return 1;/發(fā)送主機文件目錄int SendFileList(SOCKET datatcps)HANDLE hff;WIN32_FIND_DATA fd; /獲取和更改文件屬性hff=FindFirstFile("*",&fd);/搜索文件if(hff=INVALID_HANDLE_VALUE)/搜索無效返回值const cha
10、r *errstr="can't list files!n"cout<<"list file error!"<<endl;if(send(datatcps,errstr,strlen(errstr),0)=SOCKET_ERROR)cout<<"error occurs when sending file list!"<<endl;closesocket(datatcps);return 0;BOOL fMoreFiles=TRUE;/BOOL型,返回值為大于0的整數(shù)時為TRUE
11、,返回值為0時候,為FALSE,返回值為-1時為ERROR。while(fMoreFiles)/發(fā)送此項文件信息if(!SendFileRecord(datatcps,&fd)/發(fā)送失敗closesocket(datatcps);return 0;/搜索下一個文件fMoreFiles=FindNextFile(hff,&fd);closesocket(datatcps);return 1;/發(fā)送數(shù)據(jù)int SendFile(SOCKET datatcps,FILE* file)/發(fā)送文件printf("sending file data.");for(;)/
12、從文件中循環(huán)讀取數(shù)據(jù)并發(fā)送客戶端int r=fread(buf_send,1,1024,file);if(send(datatcps,buf_send,r,0)=SOCKET_ERROR)printf("lost the connection to client!n");closesocket(datatcps);return 0;if(r<1024)/文件傳送結(jié)束break;closesocket(datatcps);printf("donen");return 1;DWORD ProcessCmd()if(listen(sockSrv,5)&l
13、t;0)/監(jiān)聽信號cout<<"Listen error!"<<endl;return(-1);cout<<"Listening for the request"<<endl;SOCKADDR_IN addrclient;/定義用于返回客戶機端地址的結(jié)構(gòu)int len=(sizeof(SOCKADDR_IN);while(1)SOCKET sockconn=accept(sockSrv,(SOCKADDR*)&addrclient,&len);/接受請求,產(chǎn)生新的套接字if(sockconn
14、=INVALID_SOCKET)continue;else cout<<"connecting from client"<<endl;while(true)char filename20;memset(buf_rec,0,1024);memset(buf_send,0,1024);if(recv(sockconn,buf_rec,1024,0)<=0)break; cout<<endl<<"the command is:"<<buf_rec<<endl;if(strncmp(b
15、uf_rec,"dir",3)!=0&&strncmp(buf_rec,"get",3)!=0&&strncmp(buf_rec,"put",3)!=0)continue;/有一個請求正確執(zhí)行下面語句if(strncmp(buf_rec,"dir",3)=0)strcpy(buf_send,"dir-ingn");send(sockconn,buf_send,1024,0);SendFileList(sockconn);/發(fā)送當前所有文件名/dirif (strn
16、cmp(buf_rec,"get",3)=0) strcpy(filename,buf_rec+4);cout<<filename;FILE *file; /處理下載文件請求file=fopen(filename,"rb");/打開下載的文件if(file) sprintf(buf_send,"get file %sn",filename);if(!send(sockconn,buf_send,1024,0)fclose(file);return 0;else/創(chuàng)建額外數(shù)據(jù)連接傳送數(shù)據(jù)if(!SendFile(sockco
17、nn,file)return 0;fclose(file);/fileelse/打開文件失敗strcpy(buf_send,"can't open file!n");if(send(sockconn,buf_send,1024,0)return 0;/get 處理客戶端的下載請求if(strncmp(buf_rec,"put",3)=0)FILE *fd;int count;strcpy(filename,buf_rec+4); fd=fopen(filename,"wb");if(fd=NULL)printf("o
18、pen file %s for weite failed!n",filename);continue;sprintf(buf_send,"put file %s",filename);if(!send(sockconn,buf_send,1024,0)fclose(fd);return 0;while(count=recv(sockconn,buf_rec,1024,0)>0)fwrite(buf_rec,sizeof(char),count,fd);fclose(fd);continue;/put 處理客戶端的上傳請求int main()CreateSoc
19、ket();ProcessCmd();return(1);2. 客戶端程序源代碼:#include <Winsock2.h>#include <stdio.h>#include <iostream>using namespace std;/使用名稱空間std#pragma comment(lib, "wsock32.lib")/將WinLib.lib庫加入到工程中進行編譯#define PORT 4523/定義端口號為4523char send_str1024;char rec_str1024;char IP20;char filenam
20、e20;SOCKET sockClient;SOCKADDR_IN addrServer;/定義表示地址的結(jié)構(gòu)體addrServer,用來表示本地地址/創(chuàng)建套接字DWORD CreateSock()/本地信息addrServer.sin_family=AF_INET;/地址所屬協(xié)議簇/AF表示ADDRESS FAMILY 地址族/ htons的功能:將一個無符號短整型數(shù)值轉(zhuǎn)換為網(wǎng)絡字節(jié)序addrServer.sin_port=htons(PORT);/協(xié)議端口號WSADATA WSAData;/WSADATA結(jié)構(gòu)被用來保存函數(shù)WSAStartup返回的Windows Sockets初始化信息W
21、ORD wVersionRequsdted;int err;wVersionRequsdted=MAKEWORD(2,2);err=WSAStartup(wVersionRequsdted,&WSAData);if(err!=0)printf("sock init fail!n");return(-1);cout<<"please input the IP of host:"scanf("%s",&IP);addrServer.sin_addr.s_addr=inet_addr(IP);/計算機IP地址re
22、turn(1);DWORD ConnectServer() /連接服務器sockClient=socket(AF_INET,SOCK_STREAM,0);/創(chuàng)建套接字,SOCK_STREAM為面向連接型if(sockClient=SOCKET_ERROR)printf("sock create fail! n");WSACleanup();/中止Windows Sockets DLL的使用.return(-1);if(connect(sockClient,(struct sockaddr *)&addrServer,sizeof(addrServer)=SOCKET
23、_ERROR)/如果請求建立連接錯誤printf("Connect fail n");memset(IP,0,20);return(-1);return(1);void help()cout<<"help List:"<<endl;cout<<"dirdirectory list "<<endl;cout<<"getdownload files"<<endl;cout<<"putupload files "<
24、;<endl;cout<<"quitexit !"<<endl; /list讀取服務器列表void list(SOCKET sock)int nRead;while(true)nRead=recv(sock,rec_str,1024,0);/從一個套接口接收數(shù)據(jù)if(nRead=SOCKET_ERROR)cout<<"read response error!"<<endl;exit(1);if(nRead=0)/數(shù)據(jù)讀取結(jié)束break;/顯示數(shù)據(jù)rec_strnRead='0'prin
25、tf("%s",rec_str);int SendFile(SOCKET datatcps,FILE* file)/SOCKET datatcps定義變量數(shù)據(jù)連接套接字 cout<<"sending file data."<<endl;for(;)int r=fread(send_str,1,1024,file);/從一個流中讀數(shù)據(jù) if(send(datatcps,send_str,r,0)=SOCKET_ERROR)printf("lost the connection to client!n");clos
26、esocket(datatcps);return 0;if(r<1024)/文件傳送結(jié)束break;closesocket(datatcps);/關閉接口printf("donen");return(1);int Cprocess()int count;char order10;char param20;char command30;FILE *fd;FILE *fd2;command0='0'CreateSock();ConnectServer();cout<<"please input order :"<<
27、;endl;memset(order,0,10);/初始化為0memset(param,0,20);/初始化為0memset(command,0,30);/初始化為0memset(rec_str,0,1024);/初始化為0memset(send_str,0,1024);/初始化為0cin>>order;strcat(command,order);if(strncmp(order,"get",3)=0|strncmp(order,"put",3)=0)/輸入請求,有一個輸入要求正確,輸入目標文件名cin>>param;strcat
28、(command," ");strcat(command,param);cout<<command<<endl;strcpy(send_str,command);if(send(sockClient,send_str,sizeof(send_str),0)<0)cout<<"send data error!"<<endl;closesocket(sockClient);WSACleanup();return 0;recv(sockClient,rec_str,1024,0);/接受鏈接數(shù)據(jù),放入rec
29、_strcout<<rec_str<<endl;if(strncmp(command,"quit",4)=0)closesocket(sockClient);WSACleanup();return 0;/quitif(strncmp(rec_str,"dir",3)=0)list(sockClient);/dirif(strncmp(rec_str,"get",3)=0)fd=fopen(param,"wb");/使用二進制方式創(chuàng)建并打開名為param的文件if(fd=NULL) /打開失敗printf("open file %s for weit
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自建樓房買賣合同
- 房產(chǎn)抵押反擔保合同
- 企業(yè)信息化管理系統(tǒng)建設與維護合同
- 體育賽事活動策劃與執(zhí)行合同
- 養(yǎng)豬場生產(chǎn)經(jīng)營合同
- 重慶護理職業(yè)學院《化工儀表自動化》2023-2024學年第二學期期末試卷
- Unit 2 Topic 1 Section C 教學設計 2024-2025學年仁愛科普版八年級英語上冊
- 沈陽科技學院《漆畫創(chuàng)作》2023-2024學年第二學期期末試卷
- 《人的正確的思想從哪里來》教學設計
- 哈爾濱學院《文化創(chuàng)意理論與實踐》2023-2024學年第二學期期末試卷
- 流行病學與醫(yī)學統(tǒng)計學課件
- 電信渠道管理人員考核管理辦法
- 人教統(tǒng)編版選擇性必修1-國家制度與社會治理-活動課:中國歷史上的大一統(tǒng)國家治理優(yōu)質(zhì)課件(共20張)
- 口腔醫(yī)學美學課件-3
- 酒店的安全管理制度
- 杭州市主城區(qū)聲環(huán)境功能區(qū)劃分圖
- 湖南省陽氏宗親分布村落
- 八年級數(shù)學(上冊)整式計算題練習100道無答案_新人教版
- 豐田卡羅拉電路圖介紹
- 中考語文十大專題總復習資料
- 汽車駕駛員專業(yè)競賽實施方案
評論
0/150
提交評論