資源描述:
《c語言小項目_用Socket編程實現(xiàn)FTP》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、專業(yè)資料題目:用Socket編程實現(xiàn)FTP用Socket編程實現(xiàn)FTP一、目的和意義(功能描述)學(xué)習(xí)了TCP/IP這門課,接觸最多的是用WindowsSockets編程來實現(xiàn)一些功能。因此在熟悉了WindowsSockets的編程思想后,我覺的會很容易實現(xiàn)一個FTP的客戶應(yīng)用程序。它能夠登錄FTP服務(wù)器,并從服務(wù)器端下載數(shù)據(jù)。數(shù)據(jù)同步傳輸系統(tǒng)既適合于服務(wù)器端的目錄遍歷,又適合客戶端對服務(wù)端的上傳文件和下載文件。運(yùn)用Socket(套接字)接口和使用FTP(文件傳輸協(xié)議)來實現(xiàn)客戶端和服務(wù)器端之間信息的交互。該數(shù)據(jù)傳輸平臺分為兩個模塊:
2、服務(wù)器端模塊和客戶端模塊??蛻舴?wù)器程序通過對編程語言VisualC++6.0中的調(diào)用來實現(xiàn)利用TCP/IP協(xié)議中的FTP協(xié)議和封裝在NMFTP內(nèi)的Socket接口進(jìn)行客戶端與服務(wù)器連接,并完成數(shù)據(jù)同步工作,例如:上傳、下載、瀏覽、查詢、對服務(wù)器目錄與文件的管理以及執(zhí)行遠(yuǎn)程命令等。??服務(wù)器端程序則持續(xù)的監(jiān)聽網(wǎng)絡(luò)。當(dāng)接受到客戶端的Socket,服務(wù)器程序提供相應(yīng)的服務(wù)。網(wǎng)絡(luò)通信模塊使用POP3控件來實現(xiàn)客戶端與服務(wù)器的信息交流。函數(shù)功能和流程如下:(1)首先創(chuàng)建一個CFtpclient的類的實例。(2)用LogOnToServer(
3、)函數(shù)登錄到指定的FTP服務(wù)器,允許非匿名用戶和匿名兩種登錄方式,默認(rèn)的端口為21.(3)使用MoveFile()函數(shù)來上傳下載數(shù)據(jù)文件,其中第一個參數(shù)是本地地址,第二個參數(shù)是遠(yuǎn)程地址,文件傳輸選用二進(jìn)制模式。注意,文件傳輸使用同步模式。(4)可以使用Ftpcommand()函數(shù)來執(zhí)行FTP指令,包括常用的“CWD/home/mydir”來改變遠(yuǎn)程服務(wù)器上的地址,并處理服務(wù)器返回的應(yīng)答。當(dāng)這種方式不適用的時候,還可以使用WriteStr()函數(shù)和ReadStr()函數(shù)向遠(yuǎn)程服務(wù)器發(fā)送指令,并自己解釋返回的應(yīng)答。(5)當(dāng)所有的文件傳輸
4、完成之后,使用LogOffServer函數(shù)來斷開與遠(yuǎn)程服務(wù)器的連接。二、基本原理它的原理也相當(dāng)?shù)暮唵?,客戶端程序?qū)崿F(xiàn)一個命令行或圖形界面,將用戶命令翻譯成FTP命令,并發(fā)送給服務(wù)器端程序。服務(wù)器端程序響應(yīng)FTP命令,并將操作成功與否的信息以FTP響應(yīng)形式返回給客戶端程序。雙方遵守FTP協(xié)議,完成文件傳輸服務(wù)。就是利用MFC提供的CSocket類和CAsyncsocket類實現(xiàn)一個客戶/服務(wù)器模式的數(shù)據(jù)通信模式,使用CSocketFile類和CArchive類來讀寫數(shù)據(jù)。它很好的實現(xiàn)了所有的功能,提供了簡潔實用的接口。三、詳細(xì)設(shè)計Wi
5、ndowsSockets實現(xiàn),一個WindowsSockets實現(xiàn)是指實現(xiàn)了WindowsSockets規(guī)范所描述的全部功能的一套軟件。一般通過DLL文件來實現(xiàn)。Windows環(huán)境下進(jìn)行網(wǎng)絡(luò)程序設(shè)計的最基本方法是應(yīng)用WindowsSockets來實現(xiàn),通過使用MFC提供的WindowsSockets類,能夠很好的完成FTP的功能。連接管理: 數(shù)據(jù)連接有3大用途: ?。?)從客戶向服務(wù)器發(fā)送一個文件 ?。?)從服務(wù)器向客戶發(fā)送一個文件 ?。?)word完美格式專業(yè)資料從服務(wù)器向客戶發(fā)送文件或目錄列表?! ∶恳粋€數(shù)據(jù)連接對傳輸一個文件
6、或目錄序列都要建立一個新的連接?! 。?)客戶發(fā)出命令要求建立數(shù)據(jù)連接 ?。?)客戶在客戶主機(jī)上未數(shù)據(jù)連接選擇一個固定的端口號 ?。?)客戶使用PORT命令從控制連接上把端口號發(fā)給服務(wù)器?! 。?)服務(wù)器在控制連接上接收端口號,并向客戶端主機(jī)上的端口發(fā)出主動打開,服務(wù)器的數(shù)據(jù)連接使用端口21?;咎捉幼譃榱烁谜f明套接字編程原理,給出幾個基本的套接字,在以后的篇幅中會給出更詳細(xì)的使用說明。1、創(chuàng)建套接字——socket()功能:使用前創(chuàng)建一個新的套接字格式:SOCKETPASCALFARsocket(intaf,inttype,in
7、tprocotol);參數(shù):af:通信發(fā)生的區(qū)域type:要建立的套接字類型procotol:使用的特定協(xié)議2、指定本地地址——bind()功能:將套接字地址與所創(chuàng)建的套接字號聯(lián)系起來。格式:intPASCALFARbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);參數(shù):s:是由socket()調(diào)用返回的并且未作連接的套接字描述符(套接字號)。其它:沒有錯誤,bind()返回0,否則SOCKET_ERROR地址結(jié)構(gòu)說明:structsockaddr_in{shortsin_fa
8、mily;//AF_INETu_shortsin_port;//16位端口號,網(wǎng)絡(luò)字節(jié)順序structin_addrsin_addr;//32位IP地址,網(wǎng)絡(luò)字節(jié)順序charsin_zero[8];//保留}3、建立套接字連接——co