版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、黃河水利職業(yè)技術(shù)學(xué)院 YELLOW RIVER CONSERVANCY TECHNICAL INSTITUTE 畢 業(yè) 論 文 論文題目: 一個基于 linux 的 FTP 系統(tǒng) 專 業(yè): 嵌入式 指導(dǎo)老師: 蘇錫鋒 作者姓名: 楊根濤 學(xué) 號: 信息工程系 2011 年 12 月 25 日 摘 要 FTP(File Transfer Protocol, FTP)是 TCP/IP 網(wǎng)絡(luò)上兩臺計算機(jī)傳送文件 的協(xié)議,F(xiàn)TP 是在 TCP/IP 網(wǎng)絡(luò)和 INTERNET 上最早使用的協(xié)議之一,它屬于網(wǎng)絡(luò)協(xié) 議組的應(yīng)用層。FTP 客戶機(jī)可以給服務(wù)器發(fā)出命令來下載文件,上載文件,創(chuàng)建或 改變服務(wù)器上的
2、目錄等功能。雖然這是一個小型的 ftp 程序,但它基本上實(shí)現(xiàn)了 ftp 所具有的功能。它是在任何 linux 系列的系統(tǒng)上運(yùn)行,用 linux gcc 編譯工 具。為了測試,ftp 服務(wù)器端和客戶端都要實(shí)現(xiàn)。FTP 協(xié)議是一款基于 TCP/IP 的 協(xié)議 TCP 是面向連接的可靠地一個協(xié)議。為什么會有 ftp 呢?由于網(wǎng)絡(luò)的帶寬及 各種服務(wù)的限制,單純從頁面上下載顯得又慢又不可靠,所以就有許多 FTP 工具 提供出來。從根本上說,F(xiàn)TP 就是在網(wǎng)絡(luò)中各種不同的計算機(jī)之間按照 TCP/IP 協(xié) 議來傳輸文件。FTP 采用的是現(xiàn)在流行的 Client/Server 模式,由 FTP 客戶端和 FT
3、P 服務(wù)器端程序組成。通常服務(wù)器端是遠(yuǎn)程端點(diǎn),用戶可以通過 Internet 網(wǎng)絡(luò) 連接到遠(yuǎn)程的 FTP 服務(wù)器站點(diǎn)。服務(wù)器的功能是主要的。只有當(dāng) FTP 服務(wù)器支持 各種協(xié)議和指令時,才能夠開發(fā)相應(yīng)的客戶端程序。下面就是整個 ftp 項目的設(shè) 置思路。 Abstract FTP (File Transfer Protocol, FTP), the two computers to transfer files in the TCP / IP network protocol, FTP is one of the earliest protocol used in TCP / IP netwo
4、rk and INTERNET, it belongs to the application layer of the network protocol suite. FTP client can issue commands to the server to download files, upload files, create or change directories on the server. Although this is a small ftp program, but it basically has ftp. It is running on any linux Seri
5、es system, use the linux the gcc compiler tool. In order to test the ftp server and client to be realized. The FTP protocol is a TCP / IP-based protocol TCP is connection-oriented reliable to an agreement. Why is there a ftp? Network bandwidth and service limitations, a simple download from the page
6、 is slow and unreliable, so there are many FTP tools. Fundamentally speaking, the FTP is a variety of network between computers in accordance with the TCP / IP protocol to transfer files. FTP is a popular Client / Server model, consisting of an FTP client and FTP server-side programs. Usually server
7、-side remote endpoint, users can connect through the Internet network to a remote FTP server site. The servers main function is. Only when the FTP server supports various protocols and instructions to be able to develop appropriate client program. Here is the entire set of ftp projects ideas. 目錄 摘 要
8、 2 Abstract 2 目錄 3 第一章FTP 協(xié)議與原理 3 1.1FTP 協(xié)議4 1.2FTP 工作原理 5 1.3FTP 權(quán)限管理 6 1.4FTP 的傳輸有兩種方式 7 1.5FTP 的工作方式 7 1.6 該程序服務(wù)器端實(shí)現(xiàn)的的命令 8 第二章開發(fā)環(huán)境及工具介紹 9 2.1 C 語言和 socket 機(jī)制 9 2.2 如何開發(fā)一個 Server-Client 模型的程序 11 2.3 常用的 Socket 類型 12 2.4 項目用到的 socket 函數(shù)和編譯環(huán)境 15 第三章 FTP 服務(wù)器與客戶端需求分析 16 第四章 系統(tǒng)設(shè)計與實(shí)現(xiàn) 19 4.1.軟件總體分析與設(shè)計 19
9、 4.2.各模塊具體設(shè)計 19 第五章 系統(tǒng)測試 28 5.1 系統(tǒng)可能出現(xiàn)的問題與不足 28 5.2 采用的測試類型 29 5.3 測試的過程與結(jié)果分析 29 結(jié)論 29 參考文獻(xiàn) 30 致謝 31 第一章 FTP 協(xié)議與原理 1.11.1FTP 協(xié)議協(xié)議 FTP(File Transfer Protocol) ,是文件傳輸協(xié)議的簡稱。用于 Internet 上的控制文件的雙向傳輸。同時,它也是一個應(yīng)用程序(Application) 。用戶 可以通過它把自己的 PC 機(jī)與世界各地所有運(yùn)行 FTP 協(xié)議的服務(wù)器相連,訪問 服務(wù)器上的大量程序和信息。正如其名所示:FTP 的主要作用,就是讓用戶連
10、 接上一個遠(yuǎn)程計算機(jī)(這些計算機(jī)上運(yùn)行著 FTP 服務(wù)器程序)察看遠(yuǎn)程計算機(jī) 有哪些文件,然后把文件從遠(yuǎn)程計算機(jī)上拷到本地計算機(jī),或把本地計算機(jī)的 文件送到遠(yuǎn)程計算機(jī)去。FTP 是 TCP/IP 協(xié)議組中的協(xié)議之一,是英文 File Transfer Protocol 的縮寫。該協(xié)議是 Internet 文件傳送的基礎(chǔ),它由一系 列規(guī)格說明文檔組成,目標(biāo)是提高文件的共享性,提供非直接使用遠(yuǎn)程計算機(jī), 使存儲介質(zhì)對用戶透明和可靠高效地傳送數(shù)據(jù)。簡單的說,F(xiàn)TP 就是完成兩臺 計算機(jī)之間的拷貝,從遠(yuǎn)程計算機(jī)拷貝文件至自己的計算機(jī)上,稱之為“下載 (download) ”文件。若將文件從自己計算機(jī)中
11、拷貝至遠(yuǎn)程計算機(jī)上,則稱之 為“上載(upload) ”文件。在 TCP/IP 協(xié)議中,F(xiàn)TP 標(biāo)準(zhǔn)命令 TCP 端口號為 21,Port 方式數(shù)據(jù)端口為 20。從根本上說,F(xiàn)TP 協(xié)議就是在網(wǎng)絡(luò)中各種不同 的計算機(jī)之間按照 TCP/IP 協(xié)議來傳輸文件。FTP 協(xié)議采用客戶機(jī)/服務(wù)器 (Client/Sever)模式,由 FTP 客戶端程序和 FTP 服務(wù)器端程序組成。使用時, 先啟動 FTP 客戶端程序與遠(yuǎn)程主機(jī)建立連接,然后向遠(yuǎn)程主機(jī)發(fā)出傳輸命令, 遠(yuǎn)程主機(jī)在收到命令后就給予響應(yīng),并執(zhí)行正確的命令。但是 FTP 有一個根本 的限制,那就是,如果用戶在某個主機(jī)上沒有注冊獲得授權(quán),即沒有用戶
12、名和 口令,就不能與該主機(jī)進(jìn)行文件傳輸。但匿名 FTP 服務(wù)器除外,它能夠使用戶 與遠(yuǎn)程主機(jī)建立連接并以匿名身份從遠(yuǎn)程主機(jī)上拷貝文件,而不必是該遠(yuǎn)程主 機(jī)的注冊用戶。用戶使用特殊的用戶名“Anonymous”或“guest”就可有限制 地訪問遠(yuǎn)程主機(jī)上公開的文件?,F(xiàn)在許多系統(tǒng)要求用戶將 Emai1 地址作為口令, 以便更好地對訪問者進(jìn)行跟蹤。出于安全的目的,大部分匿名 FTP 主機(jī)一般只 允許遠(yuǎn)程用戶下載(download)文件,而不允許上載(upload)文件。也就是說, 用戶只能從匿名 FTP 主機(jī)拷貝其需要的文件而不能把文件拷貝到匿名 FTP 主機(jī)。 另外,匿名 FTP 主機(jī)還采用了其他
13、一些保護(hù)措施以保護(hù)自己的文件不至于被用 戶修改和刪除,并防止計算機(jī)病毒的侵入。匿名 FTP 一直是 Internet 上獲取 信息資源的最主要方式,在 Internet 成千上萬的匿名 FTP 主機(jī)中存儲著無以 計數(shù)的文件,這些文件包含了各種各樣的信息、數(shù)據(jù)和軟件。人們只要知道特 定信息資源的主機(jī)地址,就可以用匿名 FTP 登錄。 1.21.2FTP 工作原理 拿下載文件為例,當(dāng)你啟動 FTP 從遠(yuǎn)程計算機(jī)拷貝文件時,你事實(shí)上啟動了 兩個程序:一個本地機(jī)上的 FTP 客戶程序:它向 FTP 服務(wù)器提出拷貝文件的請求。 另一個是啟動在遠(yuǎn)程計算機(jī)的上的 FTP 服務(wù)器程序,它響應(yīng)你的請求把你指定的
14、 文件傳送到你的計算機(jī)中。FTP 采用“客戶機(jī)/服務(wù)器”方式,用戶端要在自己的 本地計算機(jī)上安裝 FTP 客戶程序。與大多數(shù) Internet 服務(wù)一樣,F(xiàn)TP 也是一個客 戶機(jī)/服務(wù)器系統(tǒng)。用戶通過一個支持 FTP 協(xié)議的客戶機(jī)程序,連接到在遠(yuǎn)程主機(jī) 上的 FTP 服務(wù)器程序。用戶通過客戶機(jī)程序向服務(wù)器程序發(fā)出命令,服務(wù)器程序 執(zhí)行用戶所發(fā)出的命令,并將執(zhí)行的結(jié)果返回到客戶機(jī)。比如說,用戶發(fā)出一條 命令,要求服務(wù)器向用戶傳送某一個文件的一份拷貝,服務(wù)器會響應(yīng)這條命令, 將指定文件送至用戶的機(jī)器上??蛻魴C(jī)程序代表用戶接收到這個文件,將其存放 在用戶目錄中。使用 FTP 時必須首先登錄,在遠(yuǎn)程主
15、機(jī)上獲得相應(yīng)的權(quán)限以后, 方可上載或下載文件。也就是說,要想同哪一臺計算機(jī)傳送文件,就必須具有哪 一臺計算機(jī)的適當(dāng)授權(quán)。換言之,除非有用戶 ID 和口令,否則便無法傳送文件。 這種情況違背了 Internet 的開放性,Internet 上的 FTP 主機(jī)何止千萬,不可能要 求每個用戶在每一臺主機(jī)上都擁有帳號。匿名 FTP 就是為解決這個問題而產(chǎn)生的。 匿名 FTP 是這樣一種機(jī)制,用戶可通過它連接到遠(yuǎn)程主機(jī)上,并從其下載文件, 而無需成為其注冊用戶。系統(tǒng)管理員建立了一個特殊的用戶 ID,名為 anonymous, Internet 上的任何人在任何地方都可使用該用戶 ID。值得注意的是,匿名
16、 FTP 不 適用于所有 Internet 主機(jī),它只適用于那些提供了這項服務(wù)的主機(jī)。 FTP 支持兩種模式,一種方式叫做 Standard(也就是 PORT 方式,主動方式), 一種是 Passive(也就是 PASV,被動方式)。Standard 模式 FTP 的客戶端發(fā)送 PORT 命令到 FTP 服務(wù)器。Passive 模式 FTP 的客戶端發(fā)送 PASV 命令到 FTP Server。 主動方式的 FTP 工作過程:Port 模式 FTP 客戶端首先和 FTP 服務(wù)器的 TCP 21 端口建立連接,通過這個通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時候在這個通道 上發(fā)送 PORT 命令。PO
17、RT 命令包含了客戶端用什么端口接收數(shù)據(jù)。在傳送數(shù)據(jù)的時 候,服務(wù)器端通過自己的 TCP20 端口連接至客戶端的指定端口發(fā)送數(shù)據(jù)。FTP server 必須和客戶端建立一個新的連接用來傳送數(shù)據(jù)。 針對 FTP 服務(wù)器前面的防火墻來說,必須允許以下通訊才能支持主動方式 FTP: 1).任何端口到 FTP 服務(wù)器的 21 端口(客戶端初始化的連接 SC) 。 2).FTP 服務(wù)器的 21 端口到大于 1023 的端口(服務(wù)器響應(yīng)客戶端的控制端口 SC) 。 3)FTP 服務(wù)器的 20 端口到大于 1023 的端口(服務(wù)器端初始化數(shù)據(jù)連接到客 戶端的數(shù)據(jù)端口 SC) 。 4).大于 1023 端口到
18、 FTP 服務(wù)器的 20 端口(客戶端發(fā)送 ACK 響應(yīng)到服務(wù)器的 數(shù)據(jù)端口 SC) 。 1.31.3FTP 權(quán)限管理 在考慮 FTP 服務(wù)器安全性工作的時候,第一步要考慮的就是誰可以訪問 FTP 服 務(wù)器。在 Vsftpd 服務(wù)器軟件中,默認(rèn)提供了三類用戶。不同的用戶對應(yīng)著不同的 權(quán)限與操作方式。 一類是 Real 帳戶。這類用戶是指在 FTP 服務(wù)上擁有帳號。當(dāng)這類用戶登錄 FTP 服務(wù)器的時候,其默認(rèn)的主目錄就是其帳號命名的目錄。但是,其還可以變更 到其他目錄中去。如系統(tǒng)的主目錄等等。 第二類帳戶實(shí) Guest 用戶。在 FTP 服務(wù)器中,我們往往會給不同的部門或者 某個特定的用戶設(shè)置一
19、個帳戶。但是,這個賬戶有個特點(diǎn),就是其只能夠訪問自 己的主目錄。服務(wù)器通過這種方式來保障 FTP 服務(wù)上其他文件的安全性。這類帳 戶,在 Vsftpd 軟件中就叫做 Guest 用戶。擁有這類用戶的帳戶,只能夠訪問其主 目錄下的目錄,而不得訪問主目錄以外的文件。 第三類帳戶是 Anonymous(匿名)用戶,這也是我們通常所說的匿名訪問。這 類用戶是指在 FTP 服務(wù)器中沒有指定帳戶,但是其仍然可以進(jìn)行匿名訪問某些公 開的資源。 在組建 FTP 服務(wù)器的時候,我們就需要根據(jù)用戶的類型,對用戶進(jìn)行歸類。 默認(rèn)情況下,Vsftpd 服務(wù)器會把建立的所有帳戶都?xì)w屬為 Real 用戶。但是,這往 往不
20、符合企業(yè)安全的需要。因?yàn)檫@類用戶不僅可以訪問自己的主目錄,而且,還 可以訪問其他用戶的目錄。這就給其他用戶所在的空間 帶來一定的安全隱患。所 以,企業(yè)要根據(jù)實(shí)際情況,修改用戶所在的類別。 TCP/IP 協(xié)議中,F(xiàn)TP 標(biāo)準(zhǔn)命令 TCP 端口號為 21,Port 方式數(shù)據(jù)端口為 20。FTP 協(xié)議的任務(wù)是從一臺計算機(jī)將文件傳送到另一臺計算機(jī),它與這兩臺計算 機(jī)所處的位置、聯(lián)接的方式、甚至是是否使用相同的操作系統(tǒng)無關(guān)。假設(shè)兩臺計 算機(jī)通過 ftp 協(xié)議對話,并且能訪問 Internet, 你可以用 ftp 命令來傳輸文件。 每種操作系統(tǒng)使用上有某一些細(xì)微差別,但是每種協(xié)議基本的命令結(jié)構(gòu)是相同的。
21、1.41.4FTP 的傳輸有兩種方式 ASCII 傳輸模式和二進(jìn)制數(shù)據(jù)傳輸模式。 1) ASCII 傳輸方式:假定用戶正在拷貝的文件包含的簡單 ASCII 碼文本,如 果在遠(yuǎn)程機(jī)器上運(yùn)行的不是 UNIX,當(dāng)文件傳輸時 ftp 通常會自動地調(diào)整文件的內(nèi) 容以便于把文件解釋成另外那臺計算機(jī)存儲文本文件的格式。 2) 二進(jìn)制傳輸模式:在二進(jìn)制傳輸中,保存文件的位序,以便原始和拷貝 的是逐位一一對應(yīng)的。即使目的地機(jī)器上包含位序列的文件是沒意義的。例如, macintosh 以二進(jìn)制方式傳送可執(zhí)行文件到 Windows 系統(tǒng),在對方系統(tǒng)上,此文件 不能執(zhí)行。 如果你在 ASCII 方式下傳輸二進(jìn)制文件,
22、即使不需要也仍會轉(zhuǎn)譯。這會使傳 輸稍微變慢 ,也會損壞數(shù)據(jù),使文件變得不能用。 (在大多數(shù)計算機(jī)上,ASCII 方 式一般假設(shè)每一字符的第一有效位無意義,因?yàn)?ASCII 字符組合不使用它。如果 你傳輸二進(jìn)制文件,所有的位都是重要的。 )如果你知道這兩臺機(jī)器是同樣的,則 二進(jìn)制方式對文本文件和數(shù)據(jù)文件都是有效的。 1.51.5FTP 的工作方式 FTP 支持兩種模式,一種方式叫做 Standard (也就是 PORT 方式,主動方式), 一種是 Passive (也就是 PASV,被動方式)。 Standard 模式 FTP 的客戶端發(fā)送 PORT 命令到 FTP 服務(wù)器。Passive 模式
23、 FTP 的客戶端發(fā)送 PASV 命令到 FTP Server。 Port 模式 FTP 客戶端首先和 FTP 服務(wù)器的 TCP 21 端口建立連接,通過 這個通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時候在這個通道上發(fā)送 PORT 命令。 PORT 命令包含了客戶端用什么端口接收數(shù)據(jù)。在傳送數(shù)據(jù)的時候,服務(wù)器端通過 自己的 TCP 20 端口連接至客戶端的指定端口發(fā)送數(shù)據(jù)。 FTP server 必須和客戶 端建立一個新的連接用來傳送數(shù)據(jù)。 Passive 模式在建立控制通道的時候和 Standard 模式類似,但建立連接后發(fā) 送的不是 Port 命令,而是 Pasv 命令。FTP 服務(wù)器收到 Pa
24、sv 命令后,隨機(jī)打開一 個高端端口(端口號大于 1024)并且通知客戶端在這個端口上傳送數(shù)據(jù)的請求, 客戶端連接 FTP 服務(wù)器此端口,然后 FTP 服務(wù)器將通過這個端口進(jìn)行數(shù)據(jù)的傳送, 這個時候 FTP server 不再需要建立一個新的和客戶端之間的連接。 很多防火墻在設(shè)置的時候都是不允許接受外部發(fā)起的連接的,所以許多位于 防火墻后或內(nèi)網(wǎng)的 FTP 服務(wù)器不支持 PASV 模式,因?yàn)榭蛻舳藷o法穿過防火墻打開 FTP 服務(wù)器的高端端口;而許多內(nèi)網(wǎng)的客戶端不能用 PORT 模式登陸 FTP 服務(wù)器, 因?yàn)閺姆?wù)器的 TCP 20 無法和內(nèi)部網(wǎng)絡(luò)的客戶端建立一個新的連接,造成無法工 作。 1.
25、61.6 該程序服務(wù)器端實(shí)現(xiàn)的的命令 1).USER:指用戶名,它帶一個參數(shù)。 格式為:USER username 在登錄 ftp 服務(wù)器的時候先用此命令告訴服務(wù)器 那個用戶要登錄此服務(wù)器。如: USER root 此命令是以 root 用戶登錄服務(wù)器。 2).PASS:指明與用戶名對應(yīng)的密碼,帶一個參數(shù)。 格式為:PASS password 當(dāng)服務(wù)器收到來自客戶端的 USER 命令后,檢查其 合法后就像客戶端發(fā)提示信息要求輸入密碼,客戶端這是就可以向服務(wù)器發(fā)送 PASS 命令加上 root 用戶的密碼。服務(wù)器檢查密碼的正確后,客戶端就與服務(wù)器連 接起來了。 3).LIST: pathname
26、 參數(shù)表示要列文件的目錄路徑名,若不帶參數(shù),剛使用當(dāng)前目錄。此命令 會把 pathname 路徑下的文件或目錄按照一定的格式發(fā)送給客戶端讓客戶端顯示 出來。 4).QUIT:由于要求傳輸文件時有登陸的過程,斷開連接到應(yīng)有相應(yīng)的注銷 過程。這個命令就是從服務(wù)器上注銷的過程,如果服務(wù)器收到該命令時, 沒有文件正在傳達(dá)室輸,剛斷開控制,連接如果有文件正在傳輸,剛控制 連接仍然保持,直到收到有關(guān)傳輸結(jié)果的應(yīng)答時,服務(wù)器才斷開連接。 5).LOAD:取得文件這條命令是 FTP 事務(wù)是用得最多的命令,在請求下載文 件時都有會用到。 6).UPDATE:存放文件。 7).WYWT:請求服務(wù)器返回系統(tǒng)類型。
27、8).TYPE:表示文件類型,共有四種,所帶參數(shù)也有四種,A,E ,I ,L 分 別對應(yīng) ASCII,EBCDIC,IMAGB 和 LOCAL 類型。 格式為:TYPE type 9).CMD:請求更改服務(wù)器的當(dāng)前目錄這各命令帶一個參數(shù),參數(shù)表示要更改 的目錄名。 10).DELE:請求刪除服務(wù)器上的文件。 11).MKO:請求在服務(wù)器上新建一個目錄,這條命令帶一個參數(shù)指明要建立的 目錄名。 12). PORT:指明數(shù)據(jù)連接的端口號,帶六個參數(shù)。 格式為:PORT h1,h2,h3,h4,p1,p2 13).CAT:命令顯示某一個文件的內(nèi)容。 使用格式:CAT filename 打印 file
28、name 文件向終端。 14).TOUCH:請求在服務(wù)器上新建一個文件,這條命令帶一個參數(shù)指明要建立 的文件名。 使用格式:TOUCH filename 15).PWD:在服務(wù)器上顯示當(dāng)前工作目錄。 16).MV:請求在服務(wù)器上為某一個指定的文件或文件夾重命名。 17).CP:請求在服務(wù)器上拷貝一個目錄或文件。 使用格式:CP spathname dpathname 第二章開發(fā)環(huán)境及工具介紹 2.12.1 C C 語言和語言和 socketsocket 機(jī)制機(jī)制 C 語言是在 70 年代初創(chuàng)建的一種計算機(jī)語言,它既有匯編語言可以直接訪問 機(jī)器硬件的功能,又具有高級語言面向用戶、可讀性好和易于記
29、憶的優(yōu)點(diǎn),因此 受到廣大程序員的歡迎。C 是一種結(jié)構(gòu)化的程序設(shè)計語言。它由順序、選擇和循環(huán) 三種基本結(jié)構(gòu)組成,便于實(shí)現(xiàn)由上到下、逐步細(xì)化的結(jié)構(gòu)化程序設(shè)計。因此,用 C 編寫的程序具有容易理解和便于維護(hù)的優(yōu)點(diǎn)。C 語言的函數(shù)結(jié)構(gòu)有利于程序分割 為相對獨(dú)立的功能模塊,為大型軟件實(shí)現(xiàn)模塊化的程序設(shè)計創(chuàng)造了條件。該程序 是在 linux 系列下的 C 語言開發(fā),主要利用 linux C 下的 API Socket 編程。 Socket 通訊機(jī)制是一種較原始的通訊機(jī)制,通過 Socket 的數(shù)據(jù)表現(xiàn)出來的形 式是原始字節(jié)流信息,通訊雙方只要在此基礎(chǔ)上按照雙方約定方式進(jìn)行數(shù)據(jù)的格 式化和解析處理工作,這樣
30、才能完成具體的應(yīng)用,即實(shí)現(xiàn)某種協(xié)議的過程。 Socket 可以看成是在兩個程序間進(jìn)行通訊連接的兩個端點(diǎn),一個程序?qū)⒁欢涡畔?寫入一個 Socket 中,該 Socket 將這段信息發(fā)送給另外一個 Socket,以便使這段 信息能傳達(dá)到其他程序中。Socket 有兩種主要的工作方式:有連接的和無連接的。 有連接方式如流通訊;無連接方式如數(shù)據(jù)包方式。有連接的 Socket 操作就像一部 電話。它們必須建立一個連接和一個呼叫。所有的事情在到達(dá)時的順序與它們出 發(fā)時的順序一樣。 socket 的英文原義是“孔”或“插座” 。作為 4BDS UNIX 的進(jìn)程通信機(jī)制,取 后一種意思。通常也稱作套接字,用
31、于描述 IP 地址和端口,是一個通信鏈的句 柄。在 Internet 上的主機(jī)一般運(yùn)行了多個服務(wù)軟件,同時提供幾種服務(wù)。每種服 務(wù)都打開一個 Socket,并綁定到一個端口上,不同的端口對應(yīng)于不同的服務(wù)。 Socket 正如其英文原意那樣,象一個多孔插座。一臺主機(jī)猶如布滿各種插座的房 間,每個插座有一個編號,有的插座提供 220 伏交流電, 有的提供 110 伏交流電, 有的則提供有線電視節(jié)目。 客戶軟件將插頭插到不同編號的插座,就可以得到不 同的服務(wù)。 socket 非常類似于電話插座。以一個國家級電話網(wǎng)為例。電話的通話雙方相 當(dāng)于相互通信的 2 個進(jìn)程,區(qū)號是它的網(wǎng)絡(luò)地址;區(qū)內(nèi)一個單位的交
32、換機(jī)相當(dāng)于 一臺主機(jī),主機(jī)分配給每個用戶的局內(nèi)號碼相當(dāng)于 socket 號。任何用戶在通話之 前,首先要占有一部電話機(jī),相當(dāng)于申請一個 socket;同時要知道對方的號碼, 相當(dāng)于對方有一個固定的 socket。然后向?qū)Ψ綋芴柡艚?,相?dāng)于發(fā)出連接請求 (假如對方不在同一區(qū)內(nèi),還要撥對方區(qū)號,相當(dāng)于給出網(wǎng)絡(luò)地址) 。對方假如在 場并空閑(相當(dāng)于通信的另一主機(jī)開機(jī)且可以接受連接請求) ,拿起電話話筒,雙 方就可以正式通話,相當(dāng)于連接成功。雙方通話的過程,是一方向電話機(jī)發(fā)出信 號和對方從電話機(jī)接收信號的過程,相當(dāng)于向 socket 發(fā)送數(shù)據(jù)和從 socket 接收 數(shù)據(jù)。通話結(jié)束后,一方掛起電話機(jī)相
33、當(dāng)于關(guān)閉 socket,撤消連接。 所謂 socket 通常也稱作套接字,應(yīng)用程序通常通過套接字向網(wǎng)絡(luò)發(fā)出請 求或者應(yīng)答網(wǎng)絡(luò)請求。以 J2SDK-1.3 為例,Socket 和 ServerSocket 類庫位于 java .net 包中。ServerSocket 用于服務(wù)器端,Socket 是建立網(wǎng)絡(luò)連接時使用的。 在連接成功時,應(yīng)用程序兩端都會產(chǎn)生一個 Socket 實(shí)例,操作這個實(shí)例,完成所 需的會話。對于一個網(wǎng)絡(luò)連接來說,套接字是平等的,并沒有差別,不因?yàn)樵诜?務(wù)器端或在客戶端而產(chǎn)生不同級別。不管是 Socket 還是 ServerSocket 它們的工 作都是通過 SocketImp
34、l 類及其子類完成的。 重要的 Socket API:java .net.Socket 繼承于 java.lang.Object,有八個構(gòu)造器, 其方法并不多,下面介紹使用最頻繁的三個方法,其它方法大家可以見 JDK-1.3 文檔。 Accept 方法用于產(chǎn)生阻塞,直到接受到一個連接,并且返回一個客戶端的 Socket 對象實(shí)例。阻塞是一個術(shù)語,它使程序運(yùn)行暫時停留在這個地方,直 到一個會話產(chǎn)生,然后程序繼續(xù);通常阻塞是由循環(huán)產(chǎn)生的。 getInputStream 方法獲得網(wǎng)絡(luò)連接輸入,同時返回一個 InputStream 對象實(shí)例。 getOutputStream 方法連接的另一端將得到輸入
35、,同時返回一個 OutputStream 對 象實(shí)例。注意:其中 getInputStream 和 getOutputStream 方法均可能會產(chǎn)生一個 IOException,它必須被捕獲,因?yàn)樗鼈兎祷氐牧鲗ο?,通常都會被另一個流對象 使用。 根據(jù)連接啟動的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可 以分為三個步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。 服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等 待連接的狀態(tài),實(shí)時監(jiān)控網(wǎng)絡(luò)狀態(tài)。 客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器 端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的
36、套接字, 指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。 連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接 請求,它就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的 描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接 字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。 2.22.2 如如何何開開發(fā)發(fā)一一個個 S Se er rv ve er r- -C Cl li ie en nt t 模模型型的的程程序序 開發(fā)原理: 服務(wù)器,使用 ServerSocket 監(jiān)聽指定的端口,端口可以隨意指定(由于 1024 以下
37、的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使 用大于 1024 的端口) ,等待客戶連接請求,客戶連接后,會話產(chǎn)生;在完成會話 后,關(guān)閉連接。 客戶端,使用 Socket 對網(wǎng)絡(luò)上某一個服務(wù)器的某一個端口發(fā)出連接請求,一 旦連接成功,打開會話;會話完成后,關(guān)閉 Socket??蛻舳瞬恍枰付ù蜷_的端 口,通常臨時的、動態(tài)的分配一個 1024 以上的端口。 Socket 接口是 TCP/IP 網(wǎng)絡(luò)的 API,Socket 接口定義了許多函數(shù)或例程,程序 員可以用它們來開發(fā) TCP/IP 網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué) Internet 上的 TCP/IP 網(wǎng)絡(luò) 編程,必須理解 So
38、cket 接口。Socket 接口設(shè)計者最先是將接口放在 Unix 操作系 統(tǒng)里面的。如果了解 Unix 系統(tǒng)的輸入和輸出的話,就很容易了解 Socket 了。網(wǎng) 絡(luò)的 Socket 數(shù)據(jù)傳輸是一種特殊的 I/O,Socket 也是一種文件描述符。Socket 也 具有一個類似于打開文件的函數(shù)調(diào)用 Socket() ,該函數(shù)返回一個整型的 Socket 描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該 Socket 實(shí)現(xiàn)的。 Server-Client 模型: 2 2. .3 3 常常用用的的 S So oc ck ke et t 類類型型 有兩種:流式 Socket(SOCK_STREAM)
39、和數(shù)據(jù)報式 Socket(SOCK_DGRAM) 。流 式是一種面向連接的 Socket,針對于面向連接的 TCP 服務(wù)應(yīng)用;數(shù)據(jù)報式 Socket 是一種無連接的 Socket,對應(yīng)于無連接的 UDP 服務(wù)應(yīng)用。Socket 為了建立 Socket,程序可以調(diào)用 Socket 函數(shù),該函數(shù)返回一個類似于文件描述符的句柄。 socket 函數(shù)原型為:int socket(int domain,int type,int protocol);domain 指明所使用的協(xié)議族,通常為 PF_INET,(其與 addrinfo 里的 AF_INET 在現(xiàn)在看 來是相同的。只是歷史上人們曾構(gòu)想將 AF(
40、地址家族 address family)與 PF(protocol family 協(xié)議家族)分開,但實(shí)際上這種區(qū)分并未真正推廣,所以現(xiàn) 在 AF_INET 和 PF_INET 具有相同的意義。其中 AF_INET 是基于 IPv4 而 PF_INET 基 于 IPv6)表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP 協(xié)議族) ;type 參數(shù)指定 socket 的類型: SOCK_STREAM 或 SOCK_DGRAM,Socket 接口還定義了原始 Socket(SOCK_RAW) ,允 許程序使用低層協(xié)議;protocol 通常賦值 0。Socket()調(diào)用返回一個整型 socket 描述符,你可以在后面
41、的調(diào)用使用它。Socket 描述符是一個指向內(nèi)部數(shù)據(jù) 結(jié)構(gòu)的指針,它指向描述符表入口。調(diào)用 Socket 函數(shù)時,socket 執(zhí)行體將建立一 個 Socket,實(shí)際上建立一個 Socket意味著為一個 Socket 數(shù)據(jù)結(jié)構(gòu)分配存儲空 間。Socket 執(zhí)行體為你管理描述符表。兩個網(wǎng)絡(luò)程序之間的一個網(wǎng)絡(luò)連接包括五 種信息:通信協(xié)議、本地協(xié)議地址、本地主機(jī)端口、遠(yuǎn)端主機(jī)地址和遠(yuǎn)端協(xié)議端 口。Socket 數(shù)據(jù)結(jié)構(gòu)中包含這五種信息。socket 在測量軟件中的使用也很廣泛 。 Linux 支持多種類型的套接口,也叫做套接口尋址族,這是因?yàn)槊糠N類型的套 接口都有自己的尋址方法。Linux 支持以下
42、的套接口類型: UNIX UNIX 域套接口 INET Internet 地址族 TCP/IP 協(xié)議支持通信。 AX25 Amateur radio X25 IPX Novell IPX APPLE TALK Appletalk DDP X25 X25 這些類型的套接口代表各種不同的連接服務(wù)。 Linux 的 BSD 套接口支持下面的幾種套接口類型: 1、流式(stream) 這些套接口提供了可靠的雙向順序數(shù)據(jù)流連接。它們可以保證數(shù)據(jù)傳輸中的 完整性、正確性和單一性。I N E T 尋址族中的 T C P 協(xié)議支持這種類型的套接口。 2、數(shù)據(jù)報(Datagram) 這種類型的套接口也可以像流式
43、套接口一樣提供雙向的數(shù)據(jù)傳輸,但它們不 能保證傳輸?shù)臄?shù)據(jù)一定能夠到達(dá)目的節(jié)點(diǎn)。即使數(shù)據(jù)能夠到達(dá),也無法保證數(shù)據(jù) 以正確的順序到達(dá)以及數(shù)據(jù)的單一性、正確性。UDP 協(xié)議支持這種類型的套接口。 3、原始(Raw) 這種類型的套接口允許進(jìn)程直接存取下層的協(xié)議。 4、可靠遞送消息(Reliable Delivered Messages) 這種套接口和數(shù)據(jù)報套接口一樣,只能保證數(shù)據(jù)的到達(dá)。 5、順序數(shù)據(jù)包(Sequenced Packets) 這種套接口和流式套接口相同,除了數(shù)據(jù)包的大小是固定的。 6、數(shù)據(jù)包(Packet) 這不是標(biāo)準(zhǔn)的 BSD 套接口類型,而是 Linux 中的一種擴(kuò)展。它允許進(jìn)程直
44、接 存取設(shè)備層的數(shù)據(jù)包。 利用套接口進(jìn)行通信的進(jìn)程使用的是客戶機(jī)/服務(wù)器模式。服務(wù)器用來提供服 務(wù),而客戶機(jī)可以使用服務(wù)器提供的服務(wù),就像一個提供 w e b 頁服務(wù)的 We b 服 務(wù)器和一個讀取并瀏覽 web 頁的瀏覽器。服務(wù)器首先創(chuàng)建一個套接口,然后給它 指定一個名字。名字的形式取決于套接口的地址族,事實(shí)上也就是服務(wù)器的當(dāng)?shù)?地址。系統(tǒng)使用數(shù)據(jù)結(jié)構(gòu) sockaddr 來指定套接口的名字和地址。一個 INET 套接 口可以包括一個 I P 端口地址。你可以在/etc/services 中查看已經(jīng)注冊的端口號, 例如,一個 web 頁面服務(wù)器的端口號是 80。在服務(wù)器指定套接口的地址以后,它
45、 將監(jiān)聽和此地址有關(guān)的連接請求。請求的發(fā)起者,也就是客戶機(jī),將會創(chuàng)建一個 套接口,然后再創(chuàng)建連接請求,并指定服務(wù)器的目的地址。對于一個 INET 套接口 來說,服務(wù)器的地址就是它的 I P 地址和端口號。這些連接請求必須通過各種協(xié) 議層,然后等待服務(wù)器的監(jiān)聽套接口。一旦服務(wù)器接收到了連接請求,它將接受 或者拒絕這個請求。如果服務(wù)器接受了連接請求,它將創(chuàng)建一個新的套接口。一 旦服務(wù)器使用一個套接口來監(jiān)聽連接請求,它就不能使用同樣的套接口來支持連 接。當(dāng)連接建立起來以后,連接的兩端都可以發(fā)送和接收數(shù)據(jù)。最后,當(dāng)不再需 要此連接時,可以關(guān)閉此連接。 使用 BSD 套接口的確切含義在于套接口所使用的地
46、址族。設(shè)置一個 TCP/IP 連 接就和設(shè)置一個業(yè)余無線電 X.25 連接有很大的不同。和 VFS 一樣,Linux 從 BSD 套接口協(xié)議層中抽象出了套接口界面,此界面負(fù)責(zé)和各種不同的應(yīng)用程序之間進(jìn) 行通信。內(nèi)核初始化時,內(nèi)核中的各個不同的地址族將會在 BSD 套接口界面中登 記。稍后當(dāng)應(yīng)用程序創(chuàng)建和使用 BSD 套接口時,就將會在 BSD 套接口和它支持的 地址族之間建立一個連接。此連接是通過交叉關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)和地址族表建立的。 例如,當(dāng)一個應(yīng)用程序創(chuàng)建一個新的套接口時,將產(chǎn)生一個可以被 BSD 套接口使 用的與特定的地址族有關(guān)的套接口創(chuàng)建子過程。 設(shè)置系統(tǒng)內(nèi)核時,一系列的地址族和協(xié)議將會
47、保存在協(xié)議向量中。每一個協(xié) 議都由它的名 字代表,例如, I N E T 和其初始化進(jìn)程的地址。當(dāng)系統(tǒng)啟動并初始化套接 口界面時,將會調(diào)用每一個協(xié)議的初始化進(jìn)程。對于套接口地址族來說,這意味 著它們注冊的一系列有關(guān)協(xié)議操作。 這是一系列的子程序,每一個都執(zhí)行一個和特定的地址族有關(guān)的操作。已經(jīng) 注冊的和協(xié)議相關(guān)的操作保存在 pops 向量中,而此向量由一系列指向數(shù)據(jù)結(jié)構(gòu) proto_ops 的指針組成。 數(shù)據(jù)結(jié)構(gòu) proto_ops 包括地址族的類型以及指向與特定地址族有關(guān)的套接口 操作程序的指 針。Pops 向量用地址族標(biāo)識符作為索引。 2 2. .4 4 項項目目用用到到的的 s so oc
48、 ck ke et t 函函數(shù)數(shù)和和編編譯譯環(huán)環(huán)境境 應(yīng)用程序調(diào)用 socket 函數(shù)來創(chuàng)建一個能夠進(jìn)行網(wǎng)絡(luò)通信的套接字。 頭文件 #include #include 函數(shù)原型 int socket(int domain, int type, int protocol); 第一個參數(shù)指定應(yīng)用程序使用的通信協(xié)議的協(xié)議族,對于 TCP/IP 協(xié)議族,該 參數(shù)置 AF_INET; 第二個參數(shù)指定要創(chuàng)建的套接字類型,流套接字類型為 SOCK_STREAM、數(shù)據(jù)報 套接字類型為 SOCK_DGRAM、原始套接字 SOCK_RAW(WinSock 接口并不適用某種特定 的協(xié)議去封裝它,而是由程序自行處理數(shù)
49、據(jù)包以及協(xié)議首部) ; 第三個參數(shù)指定應(yīng)用程序所使用的通信協(xié)議。此參數(shù)可以指定單個協(xié)議系列 中的不同傳輸協(xié)議。在 Internet 通訊域中,此參數(shù)一般取值為 0,系統(tǒng)會根據(jù)套 接字的類型決定應(yīng)使用的傳輸層協(xié)議。 該函數(shù)如果調(diào)用成功就返回新創(chuàng)建的套接字的描述符,如果失敗就返回 INVALID_SOCKET。套接字描述符是一個整數(shù)類型的值。每個進(jìn)程的進(jìn)程空間里都 有一個套接字描述符表,該表中存放著套接字描述符和套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的對應(yīng)關(guān) 系。該表中有一個字段存放新創(chuàng)建的套接字的描述符,另一個字段存放套接字?jǐn)?shù) 據(jù)結(jié)構(gòu)的地址,因此根據(jù)套接字描述符就可以找到其對應(yīng)的套接字?jǐn)?shù)據(jù)結(jié)構(gòu)。每 個進(jìn)程在自己的進(jìn)程空
50、間里都有一個套接字描述符表但是套接字?jǐn)?shù)據(jù)結(jié)構(gòu)都是在 操作系統(tǒng)的內(nèi)核緩沖里。 source insight 3.5 是一個面向項目開發(fā)的程序編輯器和代碼瀏覽器,它擁 有內(nèi)置的對 C/C+, C#和 Java 等程序的分析。Source Insight 能分析你的源代碼 并在你工作的同時動態(tài)維護(hù)它自己的符號數(shù)據(jù)庫,并自動為你顯示有用的上下文 信息。 Source Insight 不僅僅是一個強(qiáng)大的程序編輯器,它還能顯示 reference trees,class inheritance diagrams 和 call trees。Source Insight 提供了最 快速的對源代碼的導(dǎo)航和任何程
51、序編輯器的源信 息。 Source Insight 提供了快速和革新的訪問源代碼和源信息的能力。與眾 多其它編輯器產(chǎn)品不同,Source Insight 能在你編輯的同時分析你的源代碼,為 你提供實(shí)用的信息并立即進(jìn)行分析。 Source Insight 是如今最好用的語言編輯器,支持幾乎所有的語言, 如 C、C+、ASM、PAS、ASP、HTML 等常見的,還支持自己定義關(guān)鍵字,如果您 是一 個程序員或者網(wǎng)頁制作人,這個軟件對您都是有幫助的! Source Insight 為您提 供了可快速訪問源代碼和源信息的功能。Source Insight 相較其它的編輯器產(chǎn)品 來說,還可以幫您分析源代碼
52、,并在您編輯的同時立刻提供給您有用的信息和分 析。 Source Insight 自動創(chuàng)建并維護(hù)它自己高性能的符號數(shù)據(jù)庫,包括函數(shù)、 method、全局變量、結(jié)構(gòu)、類和工程源文件里定義的其它類型的符號。Source Insight 可以迅速地更新您的文件信息,即使在您編輯代碼的時候。而且符號數(shù) 據(jù)庫的符號可以自動創(chuàng)建到您的工程文件中。 第三章第三章 FTPFTP 服務(wù)器與客戶端需求分析服務(wù)器與客戶端需求分析 選擇好開發(fā)工具,我們用的是 redhat linux 5 內(nèi)核版本是 2.6.18。我們選擇 在局域網(wǎng)內(nèi)通訊,以便于測試和調(diào)試;既要實(shí)現(xiàn)一個服務(wù)器,也要為其測試實(shí)現(xiàn) 一個客戶端??梢袁F(xiàn)在一
53、臺計算機(jī)上實(shí)現(xiàn)兩者并進(jìn)行調(diào)試和測試,然后再在局域 網(wǎng)中的兩臺計算機(jī)之間分別運(yùn)行客戶端和服務(wù)器端。服務(wù)器要處理多個客戶端, 所以會采用多進(jìn)程編程,每個進(jìn)程處理一個客戶端的請求。所以在編程的時候會 用到多進(jìn)程編程,和進(jìn)程間通信等知識。ftp 服務(wù)器是基于 tcp 的面向連接的安全 的可靠連接,也會用的 socket 編程,還有 ftp 整個協(xié)議的具體分析。為了測試方 便我們的服務(wù)器程序會和客戶端程序一起進(jìn)行開發(fā)。服務(wù)器與客戶端原理圖分析: 一一實(shí)現(xiàn)程序服務(wù)器端實(shí)現(xiàn)的的命令如下:一一實(shí)現(xiàn)程序服務(wù)器端實(shí)現(xiàn)的的命令如下: 1).USER:指用戶名,它帶一個參數(shù)。 格式為:USER username 在登
54、錄 ftp 服務(wù)器的時候先用此命令告訴服務(wù)器 那個用戶要登錄此服務(wù)器。如: USER root 此命令是以 root 用戶登錄服務(wù)器。 2).PASS:指明與用戶名對應(yīng)的密碼,帶一個參數(shù)。 格式為:PASS password 當(dāng)服務(wù)器收到來自客戶端的 USER 命令后,檢查其 合法后就像客戶端發(fā)提示信息要求輸入密碼,客戶端這是就可以向服務(wù)器發(fā)送 PASS 命令加上 root 用戶的密碼。服務(wù)器檢查密碼的正確后,客戶端就與服務(wù)器連 接起來了。 3).LIST: pathname 參數(shù)表示要列文件的目錄路徑名,若不帶參數(shù),剛使用當(dāng)前目錄。此命令 會把 pathname 路徑下的文件或目錄按照一定的
55、格式發(fā)送給客戶端讓客戶端顯示 出來。 4).QUIT:由于要求傳輸文件時有登陸的過程,斷開連接到應(yīng)有相應(yīng)的注銷 過程。這個命令就是從服務(wù)器上注銷的過程,如果服務(wù)器收到該命令時, 沒有文件正在傳達(dá)室輸,剛斷開控制,連接如果有文件正在傳輸,剛控制 連接仍然保持,直到收到有關(guān)傳輸結(jié)果的應(yīng)答時,服務(wù)器才斷開連接。 5).LOAD:取得文件這條命令是 FTP 事務(wù)是用得最多的命令,在請求下載文 件時都有會用到。 6).UPDATE:存放文件。 7).WYWT:請求服務(wù)器返回系統(tǒng)類型。 8).TYPE:表示文件類型,共有四種,所帶參數(shù)也有四種,A,E ,I ,L 分 別對應(yīng) ASCII,EBCDIC,IM
56、AGB 和 LOCAL 類型。 格式為:TYPE type 9).CMD:請求更改服務(wù)器的當(dāng)前目錄這各命令帶一個參數(shù),參數(shù)表示要更改 的目錄名。 10).DELE:請求刪除服務(wù)器上的文件。 11).MKO:請求在服務(wù)器上新建一個目錄,這條命令帶一個參數(shù)指明要建立的 目錄名。 12). PORT:指明數(shù)據(jù)連接的端口號,帶六個參數(shù)。 格式為:PORT h1,h2,h3,h4,p1,p2 13).CAT:命令顯示某一個文件的內(nèi)容。 使用格式:CAT filename 打印 filename 文件向終端。 14).TOUCH:請求在服務(wù)器上新建一個文件,這條命令帶一個參數(shù)指明要建立 的文件名。 使用格
57、式:TOUCH filename 15).PWD:在服務(wù)器上顯示當(dāng)前工作目錄。 16).MV:請求在服務(wù)器上為某一個指定的文件或文件夾重命名。 17).CP:請求在服務(wù)器上拷貝一個目錄或文件。 使用格式:CP spathname dpathname 第四章第四章 系統(tǒng)設(shè)計與實(shí)現(xiàn)系統(tǒng)設(shè)計與實(shí)現(xiàn) .軟件總體分析與設(shè)計軟件總體分析與設(shè)計 根據(jù)需求分析,按照系統(tǒng)開發(fā)的基本觀點(diǎn)對功能進(jìn)行分解,從功能上可對模 塊作如下劃分: 1).連接管理模塊:主要完成主機(jī)與服務(wù)器之間的連接與關(guān)閉操作。 2).文件管理模塊:主要完成文件的顯示、新建文件、刪除文件等。 3).文件傳輸模塊:主要完成主機(jī)與服務(wù)器
58、連接成功以后文件的上傳與下載。 4).輔助功能模塊:主要是保存一些登錄信息和一些簡單的配置信息。 .各模塊具體設(shè)計各模塊具體設(shè)計 該 Ftp 客戶端工具用一個 Winsocket 連接上 Ftp 服務(wù)器,然后向其發(fā)送命令。 在這個過程中,我們依靠發(fā)送響應(yīng)的機(jī)制。即發(fā)送 Ftp 命令接收返回的 響應(yīng)信息分析該信息執(zhí)行相關(guān)操作發(fā)送下一條命令。在一般意義上, 有一個 socket 用來連接 Ftp 服務(wù)器的相關(guān)端口(如默認(rèn)的 21) ,它負(fù)責(zé) Ftp 命令 的發(fā)送和接收返回的響應(yīng)信息。一些操作如“進(jìn)入目錄” 、 “刪除文件” ,依靠這個 socket 發(fā)送一條命令就可完成了。 1) 客
59、戶端與服務(wù)器連接 FTP 是建立在 TCP 之上的連接,端口號使用 21。若客戶端與服務(wù)器之間成功 連接,服務(wù)器將返回字符串,如:220 GMS (Version 5.0) 。 前三個字符 220 表示客戶端與服務(wù)器成功連接,后面的字符會因服務(wù)器的不 同而不同,但我們只關(guān)心前三個字符。 2) 用戶名和密碼認(rèn)證 客戶端發(fā)送用戶名給服務(wù)器,如:USER he,如果服務(wù)器找到用戶名 he,將返 回字符串,如:331 User name okay, need password。 接著客戶端應(yīng)發(fā)送密碼給服務(wù)器,如:PASS 123,密碼正確,返回如:230 User logged in, proceed
60、,如果用戶名或密碼認(rèn)證沒有通過,返回如:530 Not logged in。 用戶名也可以使用匿名,如:USER anonymous,返回如:331 Anonymous access allowed, send identity (e-mail name) as password。 3) 應(yīng)答碼及其含義 110:重新啟動標(biāo)記應(yīng)答。在這種情況下文本是確定的,它必須是:MARK yyyy=mmmm 其中 yyyy 是用戶進(jìn)程標(biāo)記,mmmm 是服務(wù)器標(biāo)記。 120:服務(wù)在 nnn 分鐘內(nèi)準(zhǔn)備好。 125:數(shù)據(jù)連接已打開,準(zhǔn)備傳送。 150:文件狀態(tài)良好,打開數(shù)據(jù)連接。 200:命令成功。 202:命
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國發(fā)動機(jī)曲軸行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報告
- 2025-2030年中國鉭電容器行業(yè)并購重組擴(kuò)張戰(zhàn)略制定與實(shí)施研究報告
- 高效會議管理培訓(xùn)課件
- 消防水炮知識培訓(xùn)課件
- 煤氣安全知識培訓(xùn)課件
- 2024中國采礦、采石設(shè)備制造市場前景及投資研究報告
- 廣西賀州市八步區(qū)2023-2024學(xué)年九年級上學(xué)期期末化學(xué)試題
- 炭疽防控知識培訓(xùn)課件下載
- 電磁學(xué)知識培訓(xùn)課件
- 市引申蒙氏教學(xué)幼兒園工作參考計劃
- 建筑公司員工合規(guī)手冊
- 質(zhì)量保證的基本原則與方法
- 第1講-句子結(jié)構(gòu)
- 鼻腔沖洗護(hù)理技術(shù)團(tuán)體標(biāo)準(zhǔn)解讀
- 《流感科普宣教》課件
- 紅領(lǐng)巾知識伴我成長課件
- 廚邦醬油推廣方案
- 腦血管病的三級預(yù)防
- 保險產(chǎn)品創(chuàng)新與市場定位培訓(xùn)課件
- 2022-2023學(xué)年山東省淄博四中高二(上)期末數(shù)學(xué)試卷含答案
- 《建筑賦比興》一些筆記和摘錄(上)
評論
0/150
提交評論