計算機課程設(shè)計報告_第1頁
計算機課程設(shè)計報告_第2頁
計算機課程設(shè)計報告_第3頁
計算機課程設(shè)計報告_第4頁
計算機課程設(shè)計報告_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、下載可編輯.專業(yè).整理.課程設(shè)計課程名稱題目名稱學(xué)生學(xué)院專業(yè)班級學(xué) 號學(xué)生姓名指導(dǎo)教師200 年 月 日摘要本課程設(shè)計說明書主要說明了在 windows下如何用c語言編寫設(shè)計ftp服務(wù)器和客戶端的基本方法及其實現(xiàn)。包含了 TCP/IP協(xié)議基本通信原理,Winsock編程基本原理以及ftp工作原 理。正文部分是程序設(shè)計的具體內(nèi)容及其源代碼,最后是報告反思及總結(jié)。關(guān)鍵詞:TCP/ipWinsock,ftp摘要1.緒論2設(shè)計目的2設(shè)計要求2計算機網(wǎng)絡(luò)實驗環(huán)境建立在TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)之上。2具體要求 2設(shè)計準(zhǔn)備1設(shè)計方案.開發(fā)環(huán)境介紹2.相關(guān)原理分析了解2TCP/IP 原理2網(wǎng)絡(luò)層協(xié)議2應(yīng)用層協(xié)

2、議23.2Winsock 編程原理 33.23Winsock編程模型:數(shù)據(jù)報套接字編程模型Winsock I/O 模型.43.3TP工作原理.43.4Winsock API基本函數(shù)介紹(1)WSAStartup ()函數(shù)和 WSACleanup ()函數(shù)(2)socket ()函數(shù)(3)bind()函數(shù)(4)listen()函數(shù).6(5)accept()函數(shù)(6)connect。函數(shù).6closesocket()函數(shù).64.總體設(shè)計7.4.1 了解Winsock與操作系統(tǒng)的關(guān)系4.2實現(xiàn)功能流程圖5.詳細(xì)設(shè)計5.1文件傳輸源程序代碼(1)客戶端client程序代碼(2)、服務(wù)器端server程

3、序代碼19六、系統(tǒng)實現(xiàn)步驟30七、總結(jié)結(jié)論(心得體會)3233.緒 論設(shè)計目的本設(shè)計旨在利用原始socket簡單實現(xiàn)FTP(File Transfer Protocol,文件傳輸協(xié)議)的客戶端和 服務(wù)器端程序,能夠?qū)崿F(xiàn)get、put、pwd、dir、cd等基本交互命令。通過完成此設(shè)計,了解Winsock API函數(shù)調(diào)用方法和一般網(wǎng)絡(luò)應(yīng)用程序的編程方法,理解FTP協(xié)議,掌握C語言設(shè)計FTP協(xié)議軟件的基本技術(shù),為將來開發(fā)其他通信協(xié)議軟件打下堅 實基礎(chǔ)0設(shè)計要求計算機網(wǎng)絡(luò)實驗環(huán)境建立在TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)之上。各計算機除了安裝 TCP/IP軟件外,還安裝了 TCP/IP開發(fā)系統(tǒng)。實驗室各計算機具

4、備 Windows環(huán)境中套接字socket的編程接口功能,可為用戶提供全網(wǎng)范圍的進(jìn)程通信功能。 本實驗要求學(xué)生利用這些功能,設(shè)計和實現(xiàn)一個簡單的文件傳送協(xié)議。具體要求用socket編程接口編寫兩個程序,分別為客戶程序(client.c)和服務(wù)器程序(server , 該程序應(yīng)能實現(xiàn)下述命令功能:get:取遠(yuǎn)方的一個文件put :傳給遠(yuǎn)方一個文件pwd :顯示遠(yuǎn)主當(dāng)前目錄dir:列出遠(yuǎn)方當(dāng)前目錄cd :改變遠(yuǎn)方當(dāng)前目錄?:顯示你提供的命令quit :退出返回計準(zhǔn)備裝有Windows操作系統(tǒng)的PC機、Visual C+ 6.0編譯器或VS2010編譯器計方案.服務(wù)器端調(diào)用socket的accept

5、 ()方法,等待客戶端聯(lián)接。.客戶端發(fā)送需要從服務(wù)端獲得的文件夾路徑給服務(wù)器端。.服務(wù)器端根據(jù)客戶端發(fā)來的路徑遍歷整個路徑下的文件及文件夾,并將需要傳送到文件記錄全路徑記錄到一個String類型的數(shù)組中,并將文件的個數(shù)發(fā)送給客戶端。.客戶端接收服務(wù)器端發(fā)來的文件個數(shù),并向服務(wù)器端發(fā)送關(guān)閉聯(lián)接請求,并關(guān)閉客戶 端連接。.服務(wù)器端收取關(guān)閉連接請求,將socket關(guān)閉,進(jìn)入傳輸文件循環(huán)中。.服務(wù)器端調(diào)用socket的accept ()方法,等待客戶端聯(lián)接。.客戶端根據(jù)剛才取得的要傳輸?shù)奈募?shù),進(jìn)行循環(huán)獲取文件,記得每次取完文件要關(guān) 閉socket連接,這樣就不會將多個文件寫入到同一個文件中。.開發(fā)環(huán)

6、境介紹VC6.0編程環(huán)境:首先建一個工程,填入文件名,點擊下一步,出現(xiàn)要創(chuàng)建的文件夾名 填上點擊下一步,完成建立工程。然后再點擊新建菜單,新建一個C/C+source文件,點 擊下一步,完成建立過程,然后在窗口中寫入源代碼,執(zhí)行即可。.相關(guān)原理分析了解TCP/IP 原理TCP協(xié)議和IP協(xié)議指兩個用在Internet上的網(wǎng)絡(luò)協(xié)議(或數(shù)據(jù)傳輸?shù)姆椒ǎK鼈兎謩e 是傳輸控制協(xié)議和互連網(wǎng)協(xié)議。這兩個協(xié)議屬于眾多的TCP/IP協(xié)議組中的一部分。TCP/IP協(xié)議組中的協(xié)議保證Internet上數(shù)據(jù)的傳輸,提供了幾乎現(xiàn)在上網(wǎng)所用到的所有 服務(wù)。這些服務(wù)包括:電子郵件的傳輸,文件傳輸,新聞組的發(fā)布,訪問萬維網(wǎng)

7、在TCP/IP協(xié)議組分兩種協(xié)議:網(wǎng)絡(luò)層的協(xié)議和應(yīng)用層的協(xié)議網(wǎng)絡(luò)層協(xié)議:網(wǎng)絡(luò)層協(xié)議管理離散的計算機間的數(shù)據(jù)傳輸。這些協(xié)議用戶注意不到,是在系統(tǒng)表層以下工作的。比如,IP協(xié)議為用戶和遠(yuǎn)程計算機提供了信息包的傳輸 方法。它是在許多信息的基礎(chǔ)上工作的,比如說是機器的IP地址。在機器IP地址和其它信 息的基礎(chǔ)上,IP確保信息包能正確地到達(dá)目的機器。通過這一過程,IP和其它網(wǎng)絡(luò)層的協(xié)議 共同用于數(shù)據(jù)傳輸。如果沒有網(wǎng)絡(luò)工具,用戶就看不到在系統(tǒng)里工作的IP。應(yīng)用層協(xié)議:相反地,應(yīng)用層協(xié)議用戶是可以看得到的。比如,文件傳輸協(xié)議(FTP)用戶是看得到的。 用戶為了傳輸一個文件請求一個和其它計算機的連接,連接建立后

8、,就開始傳輸文件。在傳輸時,用戶和遠(yuǎn)程計算機的交換的一部分是能看到的。TCP/IP通過使用協(xié)議棧工作。這個棧是所有用來在兩臺機器間完成一個傳輸?shù)乃袇f(xié)議 的幾個集合。(這也就是一個通路,數(shù)據(jù)通過它從一臺機器到另一臺機器。)棧分成層,與 這里有關(guān)的是五個層。棧的每一層都能從相鄰的層中接收或發(fā)送數(shù)據(jù)。每一層都與許多協(xié)議 相聯(lián)系。在棧的每一層,這些協(xié)議都在起作用。本章的下一部分將分析這些服務(wù),以及它們 在棧中是如何聯(lián)系的。同時也分析一下它們的功能,它們提供的服務(wù)和與安全性的關(guān)系。Winsock 編程原理通過Winsock可實現(xiàn)點對點或廣播通信程序,實際這兩者之間的區(qū)別不大,編程時 其程序流程所用代碼

9、幾乎相同,不同的地方在于目標(biāo)地址選擇的不同。由于Winsock的服務(wù)是以動態(tài)鏈接庫 Winsock DLL形式實現(xiàn)的,因此先調(diào)用1、WSAStartup 對 Winsock DLL 進(jìn)行初始化2、應(yīng)用程序關(guān)閉套接字后,還應(yīng)調(diào)用 WSACleanup終止對Winsock DLL的使用3.23Winsock編程模型:流套接字編程模型:.服務(wù)器進(jìn)程創(chuàng)建套接字socket.將本地地址綁定到所創(chuàng)建的套接字bind.將套接字置入監(jiān)聽模式并準(zhǔn)備接受連接請求listen , accept.客戶進(jìn)程調(diào)用socket函數(shù)創(chuàng)建客戶端套接字.客戶向服務(wù)進(jìn)程發(fā)出連接請求connect.當(dāng)服務(wù)器接收到客戶請求,阻塞的ac

10、cept進(jìn)程,生成新一個新的套接字與客戶套接字建立連接,并向客戶端返回接受信號.客戶套接字收到服務(wù)器接受信號,表示連接建立成功,開始用 send, recv進(jìn)行收發(fā)數(shù)據(jù)8關(guān)閉套接字先用 shutdown 再用 closesocket數(shù)據(jù)報套接字編程模型:服務(wù)器用socket創(chuàng)建,用bind綁定用readfrom從網(wǎng)絡(luò)上接收,收不到進(jìn)入阻塞客戶端也用socket , bind綁定客戶端用sendto發(fā)送數(shù)據(jù)服務(wù)器端接收數(shù)據(jù),用sendto進(jìn)行響應(yīng)數(shù)據(jù)發(fā)送完兩者調(diào)用closesocket進(jìn)行套接字釋放Winsock I/O 模型:阻塞模式:一直等待下去,不會立即返回非阻塞模式:無論何都會返回關(guān)交出

11、程序的控制權(quán)3.3TP工作原理文件傳輸協(xié)議是從一個系統(tǒng)向另一個系統(tǒng)傳遞文件的標(biāo)準(zhǔn)方法。它的目標(biāo)在RFC 0765中寫得很清楚。FTP的目標(biāo)1)促進(jìn)文件和程序的共享2)鼓勵間接和含蓄的使用遠(yuǎn)程計算機3)使用戶不必面對主機間使用的不同的文件存儲系統(tǒng)4)有效和可靠地傳輸文件。FTP,盡管用戶可以直接通過終端來使用,是設(shè)計成讓別的 程序使用的。FTP文件傳輸應(yīng)用在客戶/服務(wù)環(huán)境。請求機器啟動一個FTP客戶端軟件。這就給目標(biāo)文 件服務(wù)器發(fā)出了一個請求。典型地,這個要求被送到端口 21。一個連接建立起來后,目標(biāo) 文件服務(wù)器必須運行一個 FTP服務(wù)軟件。FTPD是標(biāo)準(zhǔn)的FTP服務(wù)daemon。它的功能很簡

12、單:回復(fù)inetd收到的連接請求,并滿足這些要傳輸文件的請求。這個daemon在許多發(fā)行 版的UNIX中是個標(biāo)準(zhǔn)。FTPD等待一個連接請求。當(dāng)這樣的一個請求到達(dá)時,FTPD請求用 戶登錄。用戶提供它的合法的登錄名和口令或匿名登錄 。一旦登錄成功,用戶可以下載文件 了。在某些情況下,如果服務(wù)器的安全允許,用戶可以上載文件。3.4Winsock API 基本函數(shù)介紹WSAStartup ()函數(shù)和 WSACleanup ()函數(shù)由于 Winsock 2提供的API服務(wù)是以動態(tài)鏈接庫 ws2_32.dll實現(xiàn)的,所以必須先調(diào)用 WSAStartup()函數(shù)對ws2_32.dll進(jìn)行加載初始化,協(xié)商

13、Winsock的版本支持,并分配必要 的資源。在應(yīng)用程序關(guān)閉套接字后,還應(yīng)調(diào)用WSACleanup()函數(shù)來終止和卸載動態(tài)鏈接庫 ws2_32.dll ,釋放資源。socket ()函數(shù)服務(wù)進(jìn)程和客戶進(jìn)程在通信前必須創(chuàng)建各自的套接字,然后才能用相應(yīng)的套接字進(jìn)行發(fā) 送、接收操作,實現(xiàn)數(shù)據(jù)的傳輸。服務(wù)進(jìn)程總是先于客戶進(jìn)程啟動,服務(wù)進(jìn)程和客戶進(jìn)程調(diào) 用socket()函數(shù)創(chuàng)建套接字obind()函數(shù)當(dāng)用socket()創(chuàng)建套接字后,它便存在于一個名字空間(地址族)中,但并未賦名。bind ()函數(shù)通過給一個未命名套接字分配一個本地名字(主機地址/端口號)來為套接字建立本地捆綁??蛻舳艘话汶[式地向操作

14、系統(tǒng)請求一個隨機的未使用過的臨時端口號,跟自己的IP地址一起,與所創(chuàng)建的套接字建立聯(lián)系,由于該臨時端口號客戶端程序事先是不確定的, 因此不顯式地使用綁定函數(shù)。listen()函數(shù)調(diào)用listen()函數(shù)對服務(wù)器上套接字啟動監(jiān)聽,即允許客戶連接請求開始排隊。accept()函數(shù)服務(wù)器設(shè)置監(jiān)聽工作方式后,通過調(diào)用accept()函數(shù)使套接字等待接受客戶連接。如 果已有連接請求到來,該函數(shù)會返回一個新的套接字描述符,它對應(yīng)于已經(jīng)接受的那個客戶 端連接。對于該客戶機后續(xù)的所有操作,都應(yīng)使用這個新套接字。至于原來那個監(jiān)聽套接字, 它仍然用于接受其他客戶機連接,繼續(xù)處于監(jiān)聽模式。connect()函數(shù)客戶

15、端利用connect()函數(shù)和服務(wù)器建立一個端到端的連接。closesocket() 函數(shù)網(wǎng)絡(luò)通信任務(wù)完成后,利用本函數(shù)釋放套接字占用的所有資源。.總體設(shè)計了解Winsock與操作系統(tǒng)的關(guān)系I應(yīng)用程序I應(yīng)用程序2操件系統(tǒng)Windows動態(tài)鏈:接庫網(wǎng)絡(luò)編程接口一Witisock APITCP/IP辦議棧網(wǎng)儀摳動程序物應(yīng)施宿喬而實現(xiàn)功能流程圖.詳細(xì)設(shè)計文件傳輸源程序代碼(1)客戶端client程序代碼#include Winsock.h#include windows.h#include stdio.h#include time.h#include #define RECV_PORT 3312#d

16、efine SEND_PORT 4302#pragma comment(lib, wsock32.lib)SOCKET sockclient;char filename20;/文件名sockaddr_in ServerAddr;/ 服務(wù)器地址char rbuff1024;/接收緩沖區(qū)char sbuff1024;/發(fā)送緩沖區(qū)char InputIP20;/存儲輸入的服務(wù)器IPvoid help() /處理help命令cout歡迎進(jìn)入迷你FTP幫助菜單endl* * * * * * * * * * * * * * * * * * * *endll.get.下載(接受)文件endlget的用法:g

17、et文件名endlendl2.put.上彳(發(fā)送)文件endlput的用法:put文件名endl3.pwd. 顯示當(dāng)前文件夾的絕對路徑endl4.dir.顯示遠(yuǎn)方當(dāng)前目錄的文件endlendl5.cd.改變遠(yuǎn)方當(dāng)前目錄和路徑endlcd的用法(進(jìn)入下級目錄):cd路徑名endlcd的用法(進(jìn)入上級目錄):cd .endlendl6.?或者h(yuǎn)elp進(jìn)入幫助菜單endl7.quit退出 FTP endl*endl;/*dir:列出遠(yuǎn)方當(dāng)前目錄 */void list(SOCKET sockfd)int nRead;while(true)nRead=recv(sockclient,rbuff,102

18、4,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ù)rbuffnRead=0;printf(%s,rbuff); int SendFile(SOCKET datatcps,FILE* file)/*put傳給遠(yuǎn)方一個文件*/printf( sending file data.);for(;)/從文件中循環(huán)讀取數(shù)據(jù)并發(fā)送客戶端int r=fread(sbuff,1,1

19、024,file);/fread函數(shù)從 file 文件讀取 1 個 1024 長度的數(shù)據(jù)到sbuff ,返回成功讀取的元素個數(shù)if(send(datatcps,sbuff,r,0)=SOCKET_ERROR)printf(lost the connection to client!n);closesocket(datatcps);return 0;if(r1024)/文件傳送結(jié)束break;closesocket(datatcps);printf(donen);return 1;DWORD StartSock() / 啟動 winsock WSADATA WSAData;char a20;me

20、mset(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(請輸入連接的主機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ù)器 IPServerAddr.si

21、n_port=htons(RECV_PORT);/設(shè)置端口號return(1);/創(chuàng)建套接字DWORD CreateSocket()sockclient=socket(AF_INET,SOCK_STREAM,0);/ 當(dāng) socket 函數(shù)成功調(diào)用時返回一個新的 SOCKET(Socket Descriptor) if(sockclient=SOCKET_ERROR) printf(sockclient create fail! n); WSACleanup(); return(-1); return(1); DWORD CallServer() / 發(fā)送連接請求 CreateSocket()

22、; if(connect(sockclient,(structsockaddr*)&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ù)通過sockclient接口發(fā)送data里面的數(shù)據(jù),發(fā)送成

23、功返回發(fā)送的字節(jié)數(shù)if(length0)fwrite(rbuff,sizeof(rbuff),count,fd);/把count個數(shù)據(jù)長度為size0f ()的數(shù)據(jù)從rbuff輸入到fd指向的目標(biāo)文件fclose(fd);/ 關(guān)閉文件if(strncmp(rbuff,put,3)=0)/putstrcpy(filename,rbuff+9);fd2=fopen(filename,rb);/rb讀寫打開一個二進(jìn)制文件,只允許讀寫數(shù)據(jù)if(fd2)if(!SendFile(sockclient,fd2)printf(send failed!);return 0;fclose(fd2);/ 關(guān)閉文件

24、else/打開文件失敗strcpy(sbuff,cant open file!n);if(send(sockclient,sbuff,1024,0)return 0;if(strncmp(rbuff,dir,3)=0)/dirprintf(n);list(sockclient);/列出接受到的列表內(nèi)容if(strncmp(rbuff,pwd,3)=0)list(sockclient);if(strncmp(rbuff,cd,2)=0) closesocket(sockclient);WSACleanup();return main();/列出接受到的內(nèi)容-絕對路徑/cd/關(guān)閉連接/ 釋放 Wi

25、nsock(2)、服務(wù)器端server程序代碼#include Winsock.h#include windows.h#include stdio.h#define RECV_PORT 3312#define SEND_PORT 4302#pragma comment(lib, wsock32.lib)SOCKET sockclient,sockserver;sockaddr_in ServerAddr;/服務(wù)器地址sockaddr_in ClientAddr;/客戶端地址/*全局變量*/int Addrlen;/地址長度char filename20;/ 文件名char order10;/

26、命令char rbuff1024;/接收緩沖區(qū)char sbuff1024;/發(fā)送緩沖區(qū)DWORD StartSock() / 初始化 winsockWSADATA WSAData;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) printf(socket init fail!n);return (-1);return(1);DWORD CreateSocket()sockclient=socket(AF_INET,SOCK_STREAM,0);if(sockclient=SOCKET_ERROR)printf(sockclient create fail

27、! n);WSACleanup();return(-1);ServerAddr.sin_family=AF_INET;ServerAddr.sin_addr.s_addr=htonl(INADDR_ANY);ServerAddr.sin_port=htons(RECV_PORT);if(bind(sockclient,(structsockaddrFAR*)&ServerAddr,sizeof(ServerAddr)=SOCKET_ERROR)/bind函數(shù)將套接字和地址結(jié)構(gòu)綁定printf(bind is the error);return(-1);return (1);int SendFi

28、leRecord(SOCKET datatcps,WIN32_FIND_DATA *pfd)/ 用來發(fā)送當(dāng)前文件記錄char filerecordMAX_PATH+32;FILETIME ft;/文件建立時間FileTimeToLocalFileTime(&pfd-ftLastWriteTime,&ft);SYSTEMTIME lastwtime;/SYSTEMTIME系統(tǒng)時間數(shù)據(jù)結(jié)構(gòu)FileTimeToSystemTime(&ft,&lastwtime);char *dir=pfd-dwFileAttributes&FILE_ATTR舊UTE_DIRECTORY?”:;sprintf(fil

29、erecord,%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,filerecord,strlen(filerecord),0)=SOCKET_ERROR)/通過datatcps 接口發(fā)送filerecord 數(shù)據(jù),成功返回發(fā)送的字節(jié)數(shù)printf(Error occurs when sending

30、 file list!n);return 0;return 1;int SendFileList(SOCKET datatcps)HANDLE hff;/建立一個線程WIN32_FIND_DATA fd; / 搜索文件hff=FindFirstFile(*,&fd);/可以通過FindFirstFile ()函數(shù)根據(jù)當(dāng)前的文件存放路徑查找該文件來把待操作文件的相關(guān)屬性讀取到WIN32_FIND_DATA結(jié)構(gòu)中去:if(hff=INVALID_HANDLE_VALUE)/ 發(fā)生錯誤 const char *errstr=cant list files!n;printf(list file err

31、or!n);if(send(datatcps,errstr,strlen(errstr),0)=SOCKET_ERROR) printf(error occurs when senging file list!n); closesocket(datatcps);return 0; BOOL fMoreFiles=TRUE;while(fMoreFiles)/發(fā)送此項文件信息if(!SendFileRecord(datatcps,&fd) closesocket(datatcps);return 0; /搜索下一個文件fMoreFiles=FindNextFile(hff,&fd);closes

32、ocket(datatcps);return 1; int SendFile(SOCKET datatcps,FILE* file) printf( sending file data.);for(;)/從文件中循環(huán)讀取數(shù)據(jù)并發(fā)送客戶端int r=fread(sbuff,1,1024,file);/ 把 file 里面的內(nèi)容讀到sbuff 緩沖區(qū)if(send(datatcps,sbuff,r,0)=SOCKET_ERROR)printf(lost the connection to client!n);closesocket(datatcps);return 0; if(r1024)/文件傳

33、送結(jié)束break;closesocket(datatcps);printf(donen);return 1;/連接DWORD ConnectProcess()Addrlen=sizeof(sockaddr_in);if(listen(sockclient,5)0)printf(Listen error);return(-1);printf(服務(wù)器監(jiān)聽中n);for(;)sockserver=accept(sockclient,(struct sockaddr FAR *)&ClientAddr,&Addrlen);/accept函數(shù)取出連接隊列的第一個連接請求,sockclient 是處于監(jiān)聽

34、的套接字ClientAddr 是監(jiān)聽的對象地址,/Addrlen是對象地址的長度for(;)memset(rbuff,0,1024);memset(sbuff,0,1024);if(recv(sockserver,rbuff,1024,0)0)/recv函數(shù)返回接受的字節(jié)數(shù)賦給countfwrite(rbuff,sizeof(char),count,fd);/把count個數(shù)據(jù)長度為size0f ()的數(shù)據(jù)從rbuff輸入到fd指向的目標(biāo)文件printf( get %s succed!n,filename);fclose(fd);/putif(strncmp(rbuff,pwd,3)=0)ch

35、ar path1000;GetCurrentDirectory(1000,path);/找到當(dāng)前進(jìn)程的當(dāng)前目錄strcpy(sbuff,path);send(sockserver,sbuff,1024,0);/pwdif(strncmp(rbuff,dir,3)=0)strcpy(sbuff,rbuff);send(sockserver,sbuff,1024,0);SendFileList(sockserver);/ 發(fā)送當(dāng)前列表/dirif(strncmp(rbuff,cd,2)=0) strcpy(filename,rbuff+3);strcpy(sbuff,rbuff);send(soc

36、kserver,sbuff,1024,0);SetCurrentDirectory(filename);/設(shè)置當(dāng)前目錄/cdclosesocket(sockserver);/for 2/for 1int main()if(StartSock()=-1)/初始化winsockreturn(-1);if(CreateSocket()=-1)/創(chuàng)建套接字,綁定等一系列操作return(-1);if(ConnectProcess()=-1)/建立連接,并進(jìn)行相應(yīng)的命令操作return(-1);return(1);六、系統(tǒng)實現(xiàn)步驟先在編譯器中運行server.exe程序,然后服務(wù)器進(jìn)入監(jiān)聽狀態(tài);然后再運行client.exe程序,進(jìn)入連接server狀態(tài),輸入本機的IP地址,進(jìn)入連接交互界 面。 E;酶習(xí)+ 作嶇dient6 1Dcbugclicnt6 1+exe請輸入連接的服務(wù)器IP; 192, 16& L LS5請輸入命令(輸入?或help進(jìn)入幫助菜單):9歡迎

溫馨提示

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

最新文檔

評論

0/150

提交評論