影音先锋男人资源在线观看,精品国产日韩亚洲一区91,中文字幕日韩国产,2018av男人天堂,青青伊人精品,久久久久久久综合日本亚洲,国产日韩欧美一区二区三区在线

計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)FTP文件傳輸

上傳人:仙*** 文檔編號:27733828 上傳時(shí)間:2021-08-20 格式:DOC 頁數(shù):19 大小:328.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)FTP文件傳輸_第1頁
第1頁 / 共19頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)FTP文件傳輸_第2頁
第2頁 / 共19頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)FTP文件傳輸_第3頁
第3頁 / 共19頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)FTP文件傳輸》由會員分享,可在線閱讀,更多相關(guān)《計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)FTP文件傳輸(19頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、18 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 目 錄 1 課程設(shè)計(jì)的目的和意義 1 1.1設(shè)計(jì)目的 1 1.2設(shè)計(jì)意義 1 2 課程設(shè)計(jì)的內(nèi)容和要求 1 2.1設(shè)計(jì)的內(nèi)容 1 2.2設(shè)計(jì)要求 1 3 課程設(shè)計(jì)的相關(guān)技術(shù) 2 3.1實(shí)現(xiàn)軟件 2 3.2 TCP/IP協(xié)議技術(shù) 2 3.3 TCP/IP協(xié)議與Winsock網(wǎng)絡(luò)編程接口 2 3.4 Winsock API的使用 2 4 課程設(shè)計(jì)過程 3 4.1設(shè)計(jì)思路 3 4.2設(shè)計(jì)方案 3 4.3系統(tǒng)的基本功能 3 4.4客戶端的主要工作流程 4 4.5主要功能模塊如下: 5 4.4程序?qū)崿F(xiàn)部分如下: 10 4.5 程

2、序運(yùn)行結(jié)果截圖 15 5 課程設(shè)計(jì)小結(jié) 18 參考書目 18 1 課程設(shè)計(jì)的目的和意義 1.1設(shè)計(jì)目的 文件傳送是各種計(jì)算機(jī)網(wǎng)絡(luò)都實(shí)現(xiàn)的基本功能,文件傳送協(xié)議是一種最基本的應(yīng)用層協(xié)議按照客戶/服務(wù)器的模式進(jìn)行工作,提供交互式的訪問,是INTERNET使用最廣泛的協(xié)議之一。本程序設(shè)計(jì)主要學(xué)會學(xué)會利用已有網(wǎng)絡(luò)環(huán)境設(shè)計(jì)并實(shí)現(xiàn)簡單應(yīng)用層協(xié)議,掌握TCP/IP 網(wǎng)絡(luò)應(yīng)用程序基本的設(shè)計(jì)方法和實(shí)現(xiàn)技巧,理解處于相同網(wǎng)絡(luò)環(huán)境下的兩個(gè)不相同的程序如何實(shí)現(xiàn)數(shù)據(jù)上傳和下載,進(jìn)一步理解服務(wù)器和客戶端的工作原理及通信方法,在數(shù)據(jù)交互中掌握TCP/IP的體系結(jié)構(gòu),體會TCP的運(yùn)輸連接管理的三

3、個(gè)階段:建立連接、數(shù)據(jù)傳送、釋放連接。 1.2設(shè)計(jì)意義 文件傳輸協(xié)議是基于TCP\IP協(xié)議的一種標(biāo)準(zhǔn)機(jī)制下的應(yīng)用層協(xié)議,負(fù)責(zé)將文件從一臺計(jì)算機(jī)傳輸?shù)搅硪慌_計(jì)算機(jī)上,并保證其傳輸?shù)目煽啃?。要?shí)現(xiàn)與兩臺計(jì)算機(jī)所處的位置,聯(lián)系的方式以使用的操作系統(tǒng)無關(guān),F(xiàn)TP的實(shí)現(xiàn)需要解決一下的問題:兩個(gè)系統(tǒng)可能使用不同的文件名字約定,二個(gè)系統(tǒng)可能用不同的方表示文本和數(shù)據(jù),二個(gè)系統(tǒng)可能有不同的目錄結(jié)構(gòu)。解決以上問題從而可以在各種不同網(wǎng)絡(luò)之間進(jìn)行文件傳輸。 2 課程設(shè)計(jì)的內(nèi)容和要求 2.1設(shè)計(jì)的內(nèi)容 利用計(jì)算機(jī)具備Windows環(huán)境中套接字socket 的編程接口功能,可為用戶提供全網(wǎng)范圍的進(jìn)程通信功能。學(xué)

4、會利用已有網(wǎng)絡(luò)環(huán)境設(shè)計(jì)并實(shí)現(xiàn)簡單應(yīng)用層協(xié)議,掌握TCP/IP 網(wǎng)絡(luò)應(yīng)用程序基本的設(shè)計(jì)方法和實(shí)現(xiàn)技巧。用C++語言實(shí)現(xiàn)一個(gè)在相同網(wǎng)絡(luò)環(huán)境下的兩個(gè)不相同的程序如何實(shí)現(xiàn)數(shù)據(jù)上傳和下載(實(shí)現(xiàn)不同計(jì)算機(jī)之間的文件傳送)。 2.2設(shè)計(jì)要求 (1)將本地計(jì)算機(jī)上的一個(gè)或多個(gè)文件傳送到遠(yuǎn)程計(jì)算機(jī)上(上傳),或從遠(yuǎn)程計(jì)算機(jī)上獲取一個(gè)或多個(gè)文件(下載)。傳送文件實(shí)質(zhì)上是將文件進(jìn)行復(fù)制,然后上傳到遠(yuǎn)程計(jì) 算機(jī)上,或者是下載到本地計(jì)算機(jī)上,對源文件不產(chǎn)生影響。 (2)能夠傳送多種類型,多種結(jié)構(gòu),多種格式的文件。(文本文件,二進(jìn)制文件,圖像文件,聲音文件,數(shù)據(jù)壓縮文件)。此外,還可以選擇文件的格式控制以

5、及文件傳送的模式等。用戶可以根據(jù)通信雙方所用的系統(tǒng)及要傳送的文件確定在文件傳輸時(shí)選擇哪一種文件結(jié)構(gòu)。 (3)提供對本地計(jì)算機(jī)和遠(yuǎn)程計(jì)算機(jī)的目錄操作功能。 3 課程設(shè)計(jì)的相關(guān)技術(shù) 3.1實(shí)現(xiàn)軟件 操作系統(tǒng):windows7(windows NT 以上版本皆可) 編程環(huán)境:VC++6.0 編程語言:C++ 測試環(huán)境:MS-DOS 3.2 TCP/IP協(xié)議技術(shù) 在TCP/IP協(xié)議族中,有兩個(gè)互不相同的傳輸協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)。TCP為兩臺主機(jī)提供高可靠性的數(shù)據(jù)通信。它所做的工作包括把應(yīng)用程序交給它的數(shù)據(jù)分成合適的小塊交給下面的網(wǎng)絡(luò)層,確認(rèn)接收到的分

6、組,設(shè)置發(fā)送最后確認(rèn)分組的超時(shí)時(shí)鐘等。由于運(yùn)輸層提供了高可靠性的端到端的通信,因此應(yīng)用層可以忽略所有這些細(xì)節(jié)。而另一方面,UDP則為應(yīng)用層提供一種非常簡單的服務(wù)。它只是把稱作數(shù)據(jù)報(bào)的分組從一臺主機(jī)發(fā)送到另一臺主機(jī),但并不保證該數(shù)據(jù)報(bào)能到達(dá)另一端。任何必需的可靠性必須由應(yīng)用層來提供。 3.3 TCP/IP協(xié)議與Winsock網(wǎng)絡(luò)編程接口 Winsock規(guī)范不是一種網(wǎng)絡(luò)協(xié)議,而是一套開放的、支持多種協(xié)議的Windows寫的網(wǎng)絡(luò)編程接口。Winsock可以訪問很多種網(wǎng)絡(luò)協(xié)議,可以把它當(dāng)作一種協(xié)議的封裝。現(xiàn)在的Winsock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無關(guān),可以使用Winsock來調(diào)用協(xié)議的功能 3.

7、4 Winsock API的使用 下面給出了使用Winsock進(jìn)行編程時(shí)涉及的主要函數(shù): WSAStartup函數(shù)、WSACleanup函數(shù)、socket函數(shù)、closesocket函數(shù)、send函數(shù)、recv函數(shù)、bind函數(shù)、listen函數(shù)、accept函數(shù)、connect函數(shù) 4 課程設(shè)計(jì)過程 4.1設(shè)計(jì)思路 使用Socket進(jìn)行Client/Server程序設(shè)計(jì)的一般連接過程是這樣的:Server端Listen(監(jiān)聽)某個(gè)端口是否有連接請求,Client端向Server端發(fā)出Coonnect(連接)請求,Server端向Client端發(fā)回Accept(接受)信息,一個(gè)

8、連接就建立起來了。Server端和Client端都可以通過send,put,dir等方法與對方通信. 1. 客戶端指定要索取服務(wù)器端的哪個(gè)文件夾的內(nèi)容,即在客戶端將服務(wù)器端某個(gè)文件夾的路徑發(fā)送給服務(wù)器端。 2.服務(wù)器端解析這個(gè)字符串,遍歷整個(gè)文件夾,將文件夾中的文件逐個(gè)傳回到客戶端。 3.客戶端逐個(gè)接收服務(wù)器端傳來的文件,安放到指定的目錄下。 4.2設(shè)計(jì)方案 1.服務(wù)器端調(diào)用socket的accept()方法,等待客戶端聯(lián)接。 2.客戶端發(fā)送需要從服務(wù)端獲得的文件夾路徑給服務(wù)器端。 3.服務(wù)器端根據(jù)客戶端發(fā)來的路徑遍歷整個(gè)路徑下的文件及文件夾,并將需要傳送到文件記錄全路徑記錄到一

9、個(gè)String類型的數(shù)組中,并將文件的個(gè)數(shù)發(fā)送給客戶端。 4.客戶端接收服務(wù)器端發(fā)來的文件個(gè)數(shù),并向服務(wù)器端發(fā)送關(guān)閉聯(lián)接請求,并關(guān)閉客戶端連接。 5.服務(wù)器端收取關(guān)閉連接請求,將socket關(guān)閉,進(jìn)入傳輸文件循環(huán)中。 6.服務(wù)器端調(diào)用socket的accept()方法,等待客戶端聯(lián)接。 7.客戶端根據(jù)剛才取得的要傳輸?shù)奈募?shù),進(jìn)行循環(huán)獲取文件,記得每次取完文件要關(guān)閉socket連接,這樣就不會將多個(gè)文件寫入到同一個(gè)文件中。 4.3系統(tǒng)的基本功能 1.get:取遠(yuǎn)方的一個(gè)文件 2.put:傳給遠(yuǎn)方一個(gè)文件 3.pwd:顯示遠(yuǎn)主當(dāng)前目錄 4.dir:列出遠(yuǎn)方當(dāng)前目錄 5.cd

10、:改變遠(yuǎn)方當(dāng)前目錄 6.? :顯示你提供的命令 7.quit :退出返回 4.4客戶端的主要工作流程 否 開始 輸入連接的主機(jī)號 dir cd ? pwd get put quit 選擇 顯示總菜單 列出遠(yuǎn)方當(dāng)前目錄 顯示遠(yuǎn)方當(dāng)前目錄 改變遠(yuǎn)方當(dāng)前目錄 取遠(yuǎn)方的一個(gè)文件 傳給遠(yuǎn)方一個(gè)文件 顯示結(jié)果 繼續(xù) 是 結(jié)束 圖4-1客戶端的主要工作流程 4.5主要功能模塊如下: (1)幫助顯示客戶端主操作菜單 void help() { cout<<" 歡迎進(jìn)入迷你

11、FTP幫助菜單 "<

12、........上傳(發(fā)送)文件* "<

13、 "<

14、ndl <<" * * * * * * * * * * * * * * * * * * * * * "<

15、sponse error!\n"); exit(1); } if(nRead==0)//數(shù)據(jù)讀取結(jié)束 break; //顯示數(shù)據(jù) rbuff[nRead]=\0; printf("%s",rbuff); } } int SendFile(SOCKET datatcps,FILE* file)//發(fā)送文件,處理put命令 { printf(" sending file data.."); for(;;) //從文件中循環(huán)讀取數(shù)據(jù)并發(fā)送客戶端 { int r=fread(sbuff,1,1024,file);//fr

16、ead函數(shù)從file文件讀取1個(gè)1024長度的數(shù)據(jù)到sbuff,返//回成功讀取的元素個(gè)數(shù) if(send(datatcps,sbuff,r,0)==SOCKET_ERROR) { printf("lost the connection to client!\n"); closesocket(datatcps); return 0; } if(r<1024)//文件傳送結(jié)束 break; } closesocket(datatcps); printf("done\n"); return 1; } DWORD Sta

17、rtSock()//啟動(dòng)winsock {WSADATA WSAData; char a[20]; memset(a,0,20); if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)//加載winsock版本 {printf("sock init fail!\n"); return (-1); } if(strncmp(InputIP,a,20)==0){ printf("請輸入連接的主機(jī)IP:"); scanf("%s",&InputIP);} //設(shè)置地址結(jié)構(gòu) ServerAddr.sin_family=AF_INET;//AF_IN

18、ET表示使用IP地址族 ServerAddr.sin_addr.s_addr=inet_addr(InputIP);//指定服務(wù)器IP ServerAddr.sin_port=htons(RECV_PORT);//設(shè)置端口號 return(1); } //創(chuàng)建套接字 DWORD CreateSocket() { sockclient=socket(AF_INET,SOCK_STREAM,0);//當(dāng)socket函數(shù)成功調(diào)用時(shí)返回一個(gè)新的SOCKET(Socket Descriptor) if(sockclient==SOCKET_ERROR) {printf("s

19、ockclient create fail! \n"); WSACleanup(); return(-1); } return(1); } DWORD CallServer() //發(fā)送連接請求 { CreateSocket(); if (connect(sockclient,(struct sockaddr *)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR)//connect函數(shù)創(chuàng)建與指定外部端口的//連接 { printf("Connect fail \n"); memset(InputIP,0

20、,20); return(-1); } return(1); } DWORD TCPSend(char data[])//發(fā)送命令 { int length; length=send(sockclient,data,strlen(data),0);//send函數(shù)通過sockclient接口發(fā)送data里面的//數(shù)據(jù),發(fā)送成功返回發(fā)送的字節(jié)數(shù) if(length<=0) { printf("send data error ! \n"); closesocket(sockclient); WSACleanup(); return(-

21、1); } return(1); } (3)主函數(shù)代碼 int main() {char messge1[10];//定義輸入要處理的文件名 char messge2[20];//定義輸入要處理的文件名 char order[30];//輸入的命令 order[0]=\0; char buff[80];//用以存儲經(jīng)過字串格式化的order FILE *fd;//File協(xié)議主要用于訪問本地計(jì)算機(jī)中的文件,fd指針指向要訪問的目標(biāo)文件 FILE *fd2; int count; int sin_size=sizeof(ServerAddr);

22、 StartSock(); if(CallServer()==-1) return main();//發(fā)送連接請求失敗,返回主函數(shù) printf("\n請輸入命令(輸入?或help進(jìn)入幫助菜單):\n"); memset(buff,0,80);//清空數(shù)組 memset(messge2,0,20); memset(order,0,30); memset(messge1,0,10); memset(rbuff,0,1024); memset(sbuff,0,1024); scanf("%s",&messge1); if(strncmp

23、(messge1,"get",3)==0) scanf("%s",&messge2); if(strncmp(messge1,"put",3)==0) scanf("%s",&messge2); if(strncmp(messge1,"cd",2)==0) scanf("%s",&messge2); strcat(order,messge1);//把messge1加在order的末尾 strcat(order," ");//命令中間的空格 strcat(order,messge2);//把messge2加在order的末尾

24、 sprintf(buff,order);//把調(diào)整格式的order存入buff //help和? if(strncmp(messge1,"help",4)==0){ help();} if(strncmp(messge1,"?",1)==0){ help();} if(strncmp(messge1,"quit",4)==0){ printf(" 歡迎再次進(jìn)入迷你FTP,謝謝使用!\n"); closesocket(sockclient); WSACleanup(

25、); return 0; } TCPSend(buff);//發(fā)送buff里面的數(shù)據(jù) recv(sockclient,rbuff,1024,0); printf(rbuff); if(strncmp(rbuff,"get",3)==0) { fd=fopen(messge2,"wb");//使用二進(jìn)制方式,打開文件,wb只寫打開或新建一//個(gè)二進(jìn)制文件;只允許寫數(shù)據(jù)。 if(fd==NULL) { printf("open file %s for we

26、ite failed!\n",messge2); return 0; } while((count=recv(sockclient,rbuff,1024,0))>0){ fwrite(rbuff,sizeof(rbuff),count,fd);}//把count個(gè)數(shù)據(jù)長度為size0f()的數(shù)據(jù)從//rbuff輸入到fd指向的目標(biāo)文件 fclose(fd);//關(guān)閉文件 }//get if(strncmp(rbuff,"put",3)==0) { strcpy(filename,rb

27、uff+9); fd2=fopen(filename,"rb");//rb讀寫打開一個(gè)二進(jìn)制文件,只允許讀寫數(shù)據(jù)。 if(fd2){ if(!SendFile(sockclient,fd2)){ printf("send failed!"); return 0;} fclose(fd2);}//關(guān)閉文件 else//打開文件失敗 { strcpy(sbuff,"cant open file!\n"); if(send(sockclient,sbuff,1024,0)) return 0; } }//p

28、ut if(strncmp(rbuff,"dir",3)==0) { printf("\n"); list(sockclient);//列出接受到的列表內(nèi)容 }//dir if(strncmp(rbuff,"pwd",3)==0) { list(sockclient);//列出接受到的內(nèi)容--絕對路徑 } if(strncmp(rbuff,"cd",2)==0){ }//cd closesocket(sockclient);//關(guān)閉連接 WSACleanup();//釋放Winsock return main(); }//main 4

29、.4程序?qū)崿F(xiàn)部分如下: 客戶端: #include "Winsock.h" #include "windows.h" #include "stdio.h" #include "time.h" #include #define RECV_PORT 3312 #define SEND_PORT 4302 #pragma comment(lib, "wsock32.lib") SOCKET sockclient; char filename[20];//文件名 sockaddr_in ServerAddr;//服務(wù)器地址 char rbuff[

30、1024];//接收緩沖區(qū) char sbuff[1024];//發(fā)送緩沖區(qū) char InputIP[20];//存儲輸入的服務(wù)器IP //處理help命令 void help() { cout<<" 歡迎進(jìn)入迷你FTP幫助菜單 "<

31、..下載(接受)文件* "<

32、徑* "<

33、<<" *6.?或者h(yuǎn)elp................進(jìn)入幫助菜單* "<

34、{ nRead=recv(sockclient,rbuff,1024,0);//recv函數(shù)通過sockclient套接口接受數(shù)據(jù)存入rbuff緩//沖區(qū),返回接受到的字節(jié)數(shù) if(nRead==SOCKET_ERROR) { printf("read response error!\n"); exit(1); } if(nRead==0)//數(shù)據(jù)讀取結(jié)束 break; //顯示數(shù)據(jù) rbuff[nRead]=\0; printf("%s",rbuff); } } int SendFile(SOCKET dat

35、atcps,FILE* file)//發(fā)送文件,處理put命令 { printf(" sending file data.."); for(;;) //從文件中循環(huán)讀取數(shù)據(jù)并發(fā)送客戶端 { int r=fread(sbuff,1,1024,file);//fread函數(shù)從file文件讀取1個(gè)1024長度的數(shù)據(jù)到sbuff,返//回成功讀取的元素個(gè)數(shù) if(send(datatcps,sbuff,r,0)==SOCKET_ERROR) { printf("lost the connection to client!\n"); closesock

36、et(datatcps); return 0; } if(r<1024)//文件傳送結(jié)束 break; } closesocket(datatcps); printf("done\n"); return 1; } DWORD StartSock()//啟動(dòng)winsock {WSADATA WSAData; char a[20]; memset(a,0,20); if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)//加載winsock版本 {printf("sock init fail!\n"); r

37、eturn (-1); } if(strncmp(InputIP,a,20)==0){ printf("請輸入連接的主機(jī)IP:"); scanf("%s",&InputIP);} //設(shè)置地址結(jié)構(gòu) ServerAddr.sin_family=AF_INET;//AF_INET表示使用IP地址族 ServerAddr.sin_addr.s_addr=inet_addr(InputIP);//指定服務(wù)器IP ServerAddr.sin_port=htons(RECV_PORT);//設(shè)置端口號 return(1); } //創(chuàng)建套接字 DWORD CreateSock

38、et() { sockclient=socket(AF_INET,SOCK_STREAM,0);//當(dāng)socket函數(shù)成功調(diào)用時(shí)返回一個(gè)新的SOCKET(Socket Descriptor) if(sockclient==SOCKET_ERROR) {printf("sockclient create fail! \n"); WSACleanup(); return(-1); } return(1); } DWORD CallServer() //發(fā)送連接請求 { CreateSocket(); if (connect(sockclient,(s

39、truct sockaddr *)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR)//connect函數(shù)創(chuàng)建與指定外部端口的//連接 { printf("Connect fail \n"); memset(InputIP,0,20); return(-1); } return(1); } DWORD TCPSend(char data[])//發(fā)送命令 { int length; length=send(sockclient,data,strlen(data),0);//send函數(shù)通過sockclie

40、nt接口發(fā)送data里面的//數(shù)據(jù),發(fā)送成功返回發(fā)送的字節(jié)數(shù) if(length<=0) { printf("send data error ! \n"); closesocket(sockclient); WSACleanup(); return(-1); } return(1); } int main() {char messge1[10];//定義輸入要處理的文件名 char messge2[20];//定義輸入要處理的文件名 char order[30];//輸入的命令 order[0]=\0; char buff[

41、80];//用以存儲經(jīng)過字串格式化的order FILE *fd;//File協(xié)議主要用于訪問本地計(jì)算機(jī)中的文件,fd指針指向要訪問的目標(biāo)文件 FILE *fd2; int count; int sin_size=sizeof(ServerAddr); StartSock(); if(CallServer()==-1) return main();//發(fā)送連接請求失敗,返回主函數(shù) printf("\n請輸入命令(輸入?或help進(jìn)入幫助菜單):\n"); memset(buff,0,80);//清空數(shù)組 memset(messge2,0,20);

42、 memset(order,0,30); memset(messge1,0,10); memset(rbuff,0,1024); memset(sbuff,0,1024); scanf("%s",&messge1); if(strncmp(messge1,"get",3)==0) scanf("%s",&messge2); if(strncmp(messge1,"put",3)==0) scanf("%s",&messge2); if(strncmp(messge1,"cd",2)==0) scanf("%s",&mess

43、ge2); strcat(order,messge1);//把messge1加在order的末尾 strcat(order," ");//命令中間的空格 strcat(order,messge2);//把messge2加在order的末尾 sprintf(buff,order);//把調(diào)整格式的order存入buff //help和? if(strncmp(messge1,"help",4)==0){ help();} if(strncmp(messge1,"?",1)==0){ help();} if(strncmp(messge

44、1,"quit",4)==0){ printf(" 歡迎再次進(jìn)入迷你FTP,謝謝使用!\n"); closesocket(sockclient); WSACleanup(); return 0; } TCPSend(buff);//發(fā)送buff里面的數(shù)據(jù) recv(sockclient,rbuff,1024,0); printf(rbuff); if(strncmp(rbuff,"get",3)==0) { fd=fope

45、n(messge2,"wb");//使用二進(jìn)制方式,打開文件,wb只寫打開或新建一//個(gè)二進(jìn)制文件;只允許寫數(shù)據(jù)。 if(fd==NULL) { printf("open file %s for weite failed!\n",messge2); return 0; } while((count=recv(sockclient,rbuff,1024,0))>0){ fwrite(rbuff,sizeof(rbuff),count,fd);}//把count個(gè)數(shù)據(jù)

46、長度為size0f()的數(shù)據(jù)從//rbuff輸入到fd指向的目標(biāo)文件 fclose(fd);//關(guān)閉文件 }//get if(strncmp(rbuff,"put",3)==0) { strcpy(filename,rbuff+9); fd2=fopen(filename,"rb");//rb讀寫打開一個(gè)二進(jìn)制文件,只允許讀寫數(shù)據(jù)。 if(fd2){ if(!SendFile(sockclient,fd2)){ printf("send failed!"); return 0;} fclose(fd2);

47、}//關(guān)閉文件 else//打開文件失敗 { strcpy(sbuff,"cant open file!\n"); if(send(sockclient,sbuff,1024,0)) return 0; } }//put if(strncmp(rbuff,"dir",3)==0) { printf("\n"); list(sockclient);//列出接受到的列表內(nèi)容 }//dir if(strncmp(rbuff,"pwd",3)==0) { list(sockclient);//列出接受到的內(nèi)容--絕對路徑

48、 } if(strncmp(rbuff,"cd",2)==0){ }//cd closesocket(sockclient);//關(guān)閉連接 WSACleanup();//釋放Winsock return main(); }//main 4.5 程序運(yùn)行結(jié)果截圖 (1) 輸入IP 192.168.1.100與服務(wù)器連接進(jìn)入主界面 圖4-2 與服務(wù)器連接進(jìn)入主界面顯示圖 (2)dir命令操作顯示圖 圖4-3 dir命令操作顯示圖 (3)pwd命令操作顯示圖 圖4-4 pwd命令操作顯示圖 (4)cd命令操作顯示圖 圖4-

49、5 cd命令操作顯示圖 (5)get命令操作顯示圖 圖4-6 get命令操作顯示圖 (6) put命令操作圖 圖4-7 put命令操作圖 5 課程設(shè)計(jì)小結(jié) 通過這次設(shè)計(jì),我不但加深了對SOCKET的原始套接字RAW編程的理解,同時(shí)也對文件傳輸有了進(jìn)一步的認(rèn)識。本次課程設(shè)計(jì)較好地實(shí)現(xiàn)了要求做到的功能,但同時(shí)也遇到了不少的困難和挑戰(zhàn)。這次設(shè)計(jì)的主要難點(diǎn),在于數(shù)據(jù)包的發(fā)送接收,TTL的計(jì)算,以及超時(shí)的判斷。通過這次的課程設(shè)計(jì)讓我明白了很多,要多讀程序,掌握基本的函數(shù),編程要用的話,可以得心應(yīng)手。 通過這次課程設(shè)計(jì),我了解到自己網(wǎng)絡(luò)通訊技術(shù)方面還有很多不足,在完成實(shí)驗(yàn)的過程中同學(xué)給了我很大的幫助和鼓勵(lì),使我能夠很好的完成這次實(shí)驗(yàn)。 參考書目 [1]吳功宜﹑胡曉英﹑張仁﹑何云﹑王寧.計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì).機(jī)械工業(yè)出版社,2007年12月 [2]張堯?qū)W﹑郭國強(qiáng)﹑王曉春﹑趙艷標(biāo).計(jì)算機(jī)網(wǎng)絡(luò)與Internet教材(第二版).清華大學(xué)出版社,2006年11月 18

展開閱讀全文
溫馨提示:
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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!