嵌入式畢業(yè)論文_第1頁(yè)
嵌入式畢業(yè)論文_第2頁(yè)
嵌入式畢業(yè)論文_第3頁(yè)
嵌入式畢業(yè)論文_第4頁(yè)
嵌入式畢業(yè)論文_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、黃河水利職業(yè)技術(shù)學(xué)院 YELLOW RIVER CONSERVANCY TECHNICAL INSTITUTE 畢 業(yè) 論 文 論文題目: 一個(gè)基于 linux 的 FTP 系統(tǒng) 專(zhuān) 業(yè): 嵌入式 指導(dǎo)老師: 蘇錫鋒 作者姓名: 楊根濤 學(xué) 號(hào): 信息工程系 2011 年 12 月 25 日 摘 要 FTP(File Transfer Protocol, FTP)是 TCP/IP 網(wǎng)絡(luò)上兩臺(tái)計(jì)算機(jī)傳送文件 的協(xié)議,F(xiàn)TP 是在 TCP/IP 網(wǎng)絡(luò)和 INTERNET 上最早使用的協(xié)議之一,它屬于網(wǎng)絡(luò)協(xié) 議組的應(yīng)用層。FTP 客戶機(jī)可以給服務(wù)器發(fā)出命令來(lái)下載文件,上載文件,創(chuàng)建或 改變服務(wù)器上的

2、目錄等功能。雖然這是一個(gè)小型的 ftp 程序,但它基本上實(shí)現(xiàn)了 ftp 所具有的功能。它是在任何 linux 系列的系統(tǒng)上運(yùn)行,用 linux gcc 編譯工 具。為了測(cè)試,ftp 服務(wù)器端和客戶端都要實(shí)現(xiàn)。FTP 協(xié)議是一款基于 TCP/IP 的 協(xié)議 TCP 是面向連接的可靠地一個(gè)協(xié)議。為什么會(huì)有 ftp 呢?由于網(wǎng)絡(luò)的帶寬及 各種服務(wù)的限制,單純從頁(yè)面上下載顯得又慢又不可靠,所以就有許多 FTP 工具 提供出來(lái)。從根本上說(shuō),F(xiàn)TP 就是在網(wǎng)絡(luò)中各種不同的計(jì)算機(jī)之間按照 TCP/IP 協(xié) 議來(lái)傳輸文件。FTP 采用的是現(xiàn)在流行的 Client/Server 模式,由 FTP 客戶端和 FT

3、P 服務(wù)器端程序組成。通常服務(wù)器端是遠(yuǎn)程端點(diǎn),用戶可以通過(guò) Internet 網(wǎng)絡(luò) 連接到遠(yuǎn)程的 FTP 服務(wù)器站點(diǎn)。服務(wù)器的功能是主要的。只有當(dāng) FTP 服務(wù)器支持 各種協(xié)議和指令時(shí),才能夠開(kāi)發(fā)相應(yīng)的客戶端程序。下面就是整個(gè) ftp 項(xiàng)目的設(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 第二章開(kāi)發(fā)環(huán)境及工具介紹 9 2.1 C 語(yǔ)言和 socket 機(jī)制 9 2.2 如何開(kāi)發(fā)一個(gè) Server-Client 模型的程序 11 2.3 常用的 Socket 類(lèi)型 12 2.4 項(xiàng)目用到的 socket 函數(shù)和編譯環(huán)境 15 第三章 FTP 服務(wù)器與客戶端需求分析 16 第四章 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 19 4.1.軟件總體分析與設(shè)計(jì) 19

9、 4.2.各模塊具體設(shè)計(jì) 19 第五章 系統(tǒng)測(cè)試 28 5.1 系統(tǒng)可能出現(xiàn)的問(wèn)題與不足 28 5.2 采用的測(cè)試類(lèi)型 29 5.3 測(cè)試的過(guò)程與結(jié)果分析 29 結(jié)論 29 參考文獻(xiàn) 30 致謝 31 第一章 FTP 協(xié)議與原理 1.11.1FTP 協(xié)議協(xié)議 FTP(File Transfer Protocol) ,是文件傳輸協(xié)議的簡(jiǎn)稱(chēng)。用于 Internet 上的控制文件的雙向傳輸。同時(shí),它也是一個(gè)應(yīng)用程序(Application) 。用戶 可以通過(guò)它把自己的 PC 機(jī)與世界各地所有運(yùn)行 FTP 協(xié)議的服務(wù)器相連,訪問(wèn) 服務(wù)器上的大量程序和信息。正如其名所示:FTP 的主要作用,就是讓用戶連

10、 接上一個(gè)遠(yuǎn)程計(jì)算機(jī)(這些計(jì)算機(jī)上運(yùn)行著 FTP 服務(wù)器程序)察看遠(yuǎn)程計(jì)算機(jī) 有哪些文件,然后把文件從遠(yuǎn)程計(jì)算機(jī)上拷到本地計(jì)算機(jī),或把本地計(jì)算機(jī)的 文件送到遠(yuǎn)程計(jì)算機(jī)去。FTP 是 TCP/IP 協(xié)議組中的協(xié)議之一,是英文 File Transfer Protocol 的縮寫(xiě)。該協(xié)議是 Internet 文件傳送的基礎(chǔ),它由一系 列規(guī)格說(shuō)明文檔組成,目標(biāo)是提高文件的共享性,提供非直接使用遠(yuǎn)程計(jì)算機(jī), 使存儲(chǔ)介質(zhì)對(duì)用戶透明和可靠高效地傳送數(shù)據(jù)。簡(jiǎn)單的說(shuō),F(xiàn)TP 就是完成兩臺(tái) 計(jì)算機(jī)之間的拷貝,從遠(yuǎn)程計(jì)算機(jī)拷貝文件至自己的計(jì)算機(jī)上,稱(chēng)之為“下載 (download) ”文件。若將文件從自己計(jì)算機(jī)中

11、拷貝至遠(yuǎn)程計(jì)算機(jī)上,則稱(chēng)之 為“上載(upload) ”文件。在 TCP/IP 協(xié)議中,F(xiàn)TP 標(biāo)準(zhǔn)命令 TCP 端口號(hào)為 21,Port 方式數(shù)據(jù)端口為 20。從根本上說(shuō),F(xiàn)TP 協(xié)議就是在網(wǎng)絡(luò)中各種不同 的計(jì)算機(jī)之間按照 TCP/IP 協(xié)議來(lái)傳輸文件。FTP 協(xié)議采用客戶機(jī)/服務(wù)器 (Client/Sever)模式,由 FTP 客戶端程序和 FTP 服務(wù)器端程序組成。使用時(shí), 先啟動(dòng) FTP 客戶端程序與遠(yuǎn)程主機(jī)建立連接,然后向遠(yuǎn)程主機(jī)發(fā)出傳輸命令, 遠(yuǎn)程主機(jī)在收到命令后就給予響應(yīng),并執(zhí)行正確的命令。但是 FTP 有一個(gè)根本 的限制,那就是,如果用戶在某個(gè)主機(jī)上沒(méi)有注冊(cè)獲得授權(quán),即沒(méi)有用戶

12、名和 口令,就不能與該主機(jī)進(jìn)行文件傳輸。但匿名 FTP 服務(wù)器除外,它能夠使用戶 與遠(yuǎn)程主機(jī)建立連接并以匿名身份從遠(yuǎn)程主機(jī)上拷貝文件,而不必是該遠(yuǎn)程主 機(jī)的注冊(cè)用戶。用戶使用特殊的用戶名“Anonymous”或“guest”就可有限制 地訪問(wèn)遠(yuǎn)程主機(jī)上公開(kāi)的文件?,F(xiàn)在許多系統(tǒng)要求用戶將 Emai1 地址作為口令, 以便更好地對(duì)訪問(wèn)者進(jìn)行跟蹤。出于安全的目的,大部分匿名 FTP 主機(jī)一般只 允許遠(yuǎn)程用戶下載(download)文件,而不允許上載(upload)文件。也就是說(shuō), 用戶只能從匿名 FTP 主機(jī)拷貝其需要的文件而不能把文件拷貝到匿名 FTP 主機(jī)。 另外,匿名 FTP 主機(jī)還采用了其他

13、一些保護(hù)措施以保護(hù)自己的文件不至于被用 戶修改和刪除,并防止計(jì)算機(jī)病毒的侵入。匿名 FTP 一直是 Internet 上獲取 信息資源的最主要方式,在 Internet 成千上萬(wàn)的匿名 FTP 主機(jī)中存儲(chǔ)著無(wú)以 計(jì)數(shù)的文件,這些文件包含了各種各樣的信息、數(shù)據(jù)和軟件。人們只要知道特 定信息資源的主機(jī)地址,就可以用匿名 FTP 登錄。 1.21.2FTP 工作原理 拿下載文件為例,當(dāng)你啟動(dòng) FTP 從遠(yuǎn)程計(jì)算機(jī)拷貝文件時(shí),你事實(shí)上啟動(dòng)了 兩個(gè)程序:一個(gè)本地機(jī)上的 FTP 客戶程序:它向 FTP 服務(wù)器提出拷貝文件的請(qǐng)求。 另一個(gè)是啟動(dòng)在遠(yuǎn)程計(jì)算機(jī)的上的 FTP 服務(wù)器程序,它響應(yīng)你的請(qǐng)求把你指定的

14、 文件傳送到你的計(jì)算機(jī)中。FTP 采用“客戶機(jī)/服務(wù)器”方式,用戶端要在自己的 本地計(jì)算機(jī)上安裝 FTP 客戶程序。與大多數(shù) Internet 服務(wù)一樣,F(xiàn)TP 也是一個(gè)客 戶機(jī)/服務(wù)器系統(tǒng)。用戶通過(guò)一個(gè)支持 FTP 協(xié)議的客戶機(jī)程序,連接到在遠(yuǎn)程主機(jī) 上的 FTP 服務(wù)器程序。用戶通過(guò)客戶機(jī)程序向服務(wù)器程序發(fā)出命令,服務(wù)器程序 執(zhí)行用戶所發(fā)出的命令,并將執(zhí)行的結(jié)果返回到客戶機(jī)。比如說(shuō),用戶發(fā)出一條 命令,要求服務(wù)器向用戶傳送某一個(gè)文件的一份拷貝,服務(wù)器會(huì)響應(yīng)這條命令, 將指定文件送至用戶的機(jī)器上??蛻魴C(jī)程序代表用戶接收到這個(gè)文件,將其存放 在用戶目錄中。使用 FTP 時(shí)必須首先登錄,在遠(yuǎn)程主

15、機(jī)上獲得相應(yīng)的權(quán)限以后, 方可上載或下載文件。也就是說(shuō),要想同哪一臺(tái)計(jì)算機(jī)傳送文件,就必須具有哪 一臺(tái)計(jì)算機(jī)的適當(dāng)授權(quán)。換言之,除非有用戶 ID 和口令,否則便無(wú)法傳送文件。 這種情況違背了 Internet 的開(kāi)放性,Internet 上的 FTP 主機(jī)何止千萬(wàn),不可能要 求每個(gè)用戶在每一臺(tái)主機(jī)上都擁有帳號(hào)。匿名 FTP 就是為解決這個(gè)問(wèn)題而產(chǎn)生的。 匿名 FTP 是這樣一種機(jī)制,用戶可通過(guò)它連接到遠(yuǎn)程主機(jī)上,并從其下載文件, 而無(wú)需成為其注冊(cè)用戶。系統(tǒng)管理員建立了一個(gè)特殊的用戶 ID,名為 anonymous, Internet 上的任何人在任何地方都可使用該用戶 ID。值得注意的是,匿名

16、 FTP 不 適用于所有 Internet 主機(jī),它只適用于那些提供了這項(xiàng)服務(wù)的主機(jī)。 FTP 支持兩種模式,一種方式叫做 Standard(也就是 PORT 方式,主動(dòng)方式), 一種是 Passive(也就是 PASV,被動(dòng)方式)。Standard 模式 FTP 的客戶端發(fā)送 PORT 命令到 FTP 服務(wù)器。Passive 模式 FTP 的客戶端發(fā)送 PASV 命令到 FTP Server。 主動(dòng)方式的 FTP 工作過(guò)程:Port 模式 FTP 客戶端首先和 FTP 服務(wù)器的 TCP 21 端口建立連接,通過(guò)這個(gè)通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時(shí)候在這個(gè)通道 上發(fā)送 PORT 命令。PO

17、RT 命令包含了客戶端用什么端口接收數(shù)據(jù)。在傳送數(shù)據(jù)的時(shí) 候,服務(wù)器端通過(guò)自己的 TCP20 端口連接至客戶端的指定端口發(fā)送數(shù)據(jù)。FTP server 必須和客戶端建立一個(gè)新的連接用來(lái)傳送數(shù)據(jù)。 針對(duì) FTP 服務(wù)器前面的防火墻來(lái)說(shuō),必須允許以下通訊才能支持主動(dòng)方式 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ù)器安全性工作的時(shí)候,第一步要考慮的就是誰(shuí)可以訪問(wèn) FTP 服 務(wù)器。在 Vsftpd 服務(wù)器軟件中,默認(rèn)提供了三類(lèi)用戶。不同的用戶對(duì)應(yīng)著不同的 權(quán)限與操作方式。 一類(lèi)是 Real 帳戶。這類(lèi)用戶是指在 FTP 服務(wù)上擁有帳號(hào)。當(dāng)這類(lèi)用戶登錄 FTP 服務(wù)器的時(shí)候,其默認(rèn)的主目錄就是其帳號(hào)命名的目錄。但是,其還可以變更 到其他目錄中去。如系統(tǒng)的主目錄等等。 第二類(lèi)帳戶實(shí) Guest 用戶。在 FTP 服務(wù)器中,我們往往會(huì)給不同的部門(mén)或者 某個(gè)特定的用戶設(shè)置一

19、個(gè)帳戶。但是,這個(gè)賬戶有個(gè)特點(diǎn),就是其只能夠訪問(wèn)自 己的主目錄。服務(wù)器通過(guò)這種方式來(lái)保障 FTP 服務(wù)上其他文件的安全性。這類(lèi)帳 戶,在 Vsftpd 軟件中就叫做 Guest 用戶。擁有這類(lèi)用戶的帳戶,只能夠訪問(wèn)其主 目錄下的目錄,而不得訪問(wèn)主目錄以外的文件。 第三類(lèi)帳戶是 Anonymous(匿名)用戶,這也是我們通常所說(shuō)的匿名訪問(wèn)。這 類(lèi)用戶是指在 FTP 服務(wù)器中沒(méi)有指定帳戶,但是其仍然可以進(jìn)行匿名訪問(wèn)某些公 開(kāi)的資源。 在組建 FTP 服務(wù)器的時(shí)候,我們就需要根據(jù)用戶的類(lèi)型,對(duì)用戶進(jìn)行歸類(lèi)。 默認(rèn)情況下,Vsftpd 服務(wù)器會(huì)把建立的所有帳戶都?xì)w屬為 Real 用戶。但是,這往 往不

20、符合企業(yè)安全的需要。因?yàn)檫@類(lèi)用戶不僅可以訪問(wèn)自己的主目錄,而且,還 可以訪問(wèn)其他用戶的目錄。這就給其他用戶所在的空間 帶來(lái)一定的安全隱患。所 以,企業(yè)要根據(jù)實(shí)際情況,修改用戶所在的類(lèi)別。 TCP/IP 協(xié)議中,F(xiàn)TP 標(biāo)準(zhǔn)命令 TCP 端口號(hào)為 21,Port 方式數(shù)據(jù)端口為 20。FTP 協(xié)議的任務(wù)是從一臺(tái)計(jì)算機(jī)將文件傳送到另一臺(tái)計(jì)算機(jī),它與這兩臺(tái)計(jì)算 機(jī)所處的位置、聯(lián)接的方式、甚至是是否使用相同的操作系統(tǒng)無(wú)關(guān)。假設(shè)兩臺(tái)計(jì) 算機(jī)通過(guò) ftp 協(xié)議對(duì)話,并且能訪問(wèn) Internet, 你可以用 ftp 命令來(lái)傳輸文件。 每種操作系統(tǒng)使用上有某一些細(xì)微差別,但是每種協(xié)議基本的命令結(jié)構(gòu)是相同的。

21、1.41.4FTP 的傳輸有兩種方式 ASCII 傳輸模式和二進(jìn)制數(shù)據(jù)傳輸模式。 1) ASCII 傳輸方式:假定用戶正在拷貝的文件包含的簡(jiǎn)單 ASCII 碼文本,如 果在遠(yuǎn)程機(jī)器上運(yùn)行的不是 UNIX,當(dāng)文件傳輸時(shí) ftp 通常會(huì)自動(dòng)地調(diào)整文件的內(nèi) 容以便于把文件解釋成另外那臺(tái)計(jì)算機(jī)存儲(chǔ)文本文件的格式。 2) 二進(jìn)制傳輸模式:在二進(jìn)制傳輸中,保存文件的位序,以便原始和拷貝 的是逐位一一對(duì)應(yīng)的。即使目的地機(jī)器上包含位序列的文件是沒(méi)意義的。例如, macintosh 以二進(jìn)制方式傳送可執(zhí)行文件到 Windows 系統(tǒng),在對(duì)方系統(tǒng)上,此文件 不能執(zhí)行。 如果你在 ASCII 方式下傳輸二進(jìn)制文件,

22、即使不需要也仍會(huì)轉(zhuǎn)譯。這會(huì)使傳 輸稍微變慢 ,也會(huì)損壞數(shù)據(jù),使文件變得不能用。 (在大多數(shù)計(jì)算機(jī)上,ASCII 方 式一般假設(shè)每一字符的第一有效位無(wú)意義,因?yàn)?ASCII 字符組合不使用它。如果 你傳輸二進(jìn)制文件,所有的位都是重要的。 )如果你知道這兩臺(tái)機(jī)器是同樣的,則 二進(jìn)制方式對(duì)文本文件和數(shù)據(jù)文件都是有效的。 1.51.5FTP 的工作方式 FTP 支持兩種模式,一種方式叫做 Standard (也就是 PORT 方式,主動(dòng)方式), 一種是 Passive (也就是 PASV,被動(dòng)方式)。 Standard 模式 FTP 的客戶端發(fā)送 PORT 命令到 FTP 服務(wù)器。Passive 模式

23、 FTP 的客戶端發(fā)送 PASV 命令到 FTP Server。 Port 模式 FTP 客戶端首先和 FTP 服務(wù)器的 TCP 21 端口建立連接,通過(guò) 這個(gè)通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時(shí)候在這個(gè)通道上發(fā)送 PORT 命令。 PORT 命令包含了客戶端用什么端口接收數(shù)據(jù)。在傳送數(shù)據(jù)的時(shí)候,服務(wù)器端通過(guò) 自己的 TCP 20 端口連接至客戶端的指定端口發(fā)送數(shù)據(jù)。 FTP server 必須和客戶 端建立一個(gè)新的連接用來(lái)傳送數(shù)據(jù)。 Passive 模式在建立控制通道的時(shí)候和 Standard 模式類(lèi)似,但建立連接后發(fā) 送的不是 Port 命令,而是 Pasv 命令。FTP 服務(wù)器收到 Pa

24、sv 命令后,隨機(jī)打開(kāi)一 個(gè)高端端口(端口號(hào)大于 1024)并且通知客戶端在這個(gè)端口上傳送數(shù)據(jù)的請(qǐng)求, 客戶端連接 FTP 服務(wù)器此端口,然后 FTP 服務(wù)器將通過(guò)這個(gè)端口進(jìn)行數(shù)據(jù)的傳送, 這個(gè)時(shí)候 FTP server 不再需要建立一個(gè)新的和客戶端之間的連接。 很多防火墻在設(shè)置的時(shí)候都是不允許接受外部發(fā)起的連接的,所以許多位于 防火墻后或內(nèi)網(wǎng)的 FTP 服務(wù)器不支持 PASV 模式,因?yàn)榭蛻舳藷o(wú)法穿過(guò)防火墻打開(kāi) FTP 服務(wù)器的高端端口;而許多內(nèi)網(wǎng)的客戶端不能用 PORT 模式登陸 FTP 服務(wù)器, 因?yàn)閺姆?wù)器的 TCP 20 無(wú)法和內(nèi)部網(wǎng)絡(luò)的客戶端建立一個(gè)新的連接,造成無(wú)法工 作。 1.

25、61.6 該程序服務(wù)器端實(shí)現(xiàn)的的命令 1).USER:指用戶名,它帶一個(gè)參數(shù)。 格式為:USER username 在登錄 ftp 服務(wù)器的時(shí)候先用此命令告訴服務(wù)器 那個(gè)用戶要登錄此服務(wù)器。如: USER root 此命令是以 root 用戶登錄服務(wù)器。 2).PASS:指明與用戶名對(duì)應(yīng)的密碼,帶一個(gè)參數(shù)。 格式為:PASS password 當(dāng)服務(wù)器收到來(lái)自客戶端的 USER 命令后,檢查其 合法后就像客戶端發(fā)提示信息要求輸入密碼,客戶端這是就可以向服務(wù)器發(fā)送 PASS 命令加上 root 用戶的密碼。服務(wù)器檢查密碼的正確后,客戶端就與服務(wù)器連 接起來(lái)了。 3).LIST: pathname

26、 參數(shù)表示要列文件的目錄路徑名,若不帶參數(shù),剛使用當(dāng)前目錄。此命令 會(huì)把 pathname 路徑下的文件或目錄按照一定的格式發(fā)送給客戶端讓客戶端顯示 出來(lái)。 4).QUIT:由于要求傳輸文件時(shí)有登陸的過(guò)程,斷開(kāi)連接到應(yīng)有相應(yīng)的注銷(xiāo) 過(guò)程。這個(gè)命令就是從服務(wù)器上注銷(xiāo)的過(guò)程,如果服務(wù)器收到該命令時(shí), 沒(méi)有文件正在傳達(dá)室輸,剛斷開(kāi)控制,連接如果有文件正在傳輸,剛控制 連接仍然保持,直到收到有關(guān)傳輸結(jié)果的應(yīng)答時(shí),服務(wù)器才斷開(kāi)連接。 5).LOAD:取得文件這條命令是 FTP 事務(wù)是用得最多的命令,在請(qǐng)求下載文 件時(shí)都有會(huì)用到。 6).UPDATE:存放文件。 7).WYWT:請(qǐng)求服務(wù)器返回系統(tǒng)類(lèi)型。

27、8).TYPE:表示文件類(lèi)型,共有四種,所帶參數(shù)也有四種,A,E ,I ,L 分 別對(duì)應(yīng) ASCII,EBCDIC,IMAGB 和 LOCAL 類(lèi)型。 格式為:TYPE type 9).CMD:請(qǐng)求更改服務(wù)器的當(dāng)前目錄這各命令帶一個(gè)參數(shù),參數(shù)表示要更改 的目錄名。 10).DELE:請(qǐng)求刪除服務(wù)器上的文件。 11).MKO:請(qǐng)求在服務(wù)器上新建一個(gè)目錄,這條命令帶一個(gè)參數(shù)指明要建立的 目錄名。 12). PORT:指明數(shù)據(jù)連接的端口號(hào),帶六個(gè)參數(shù)。 格式為:PORT h1,h2,h3,h4,p1,p2 13).CAT:命令顯示某一個(gè)文件的內(nèi)容。 使用格式:CAT filename 打印 file

28、name 文件向終端。 14).TOUCH:請(qǐng)求在服務(wù)器上新建一個(gè)文件,這條命令帶一個(gè)參數(shù)指明要建立 的文件名。 使用格式:TOUCH filename 15).PWD:在服務(wù)器上顯示當(dāng)前工作目錄。 16).MV:請(qǐng)求在服務(wù)器上為某一個(gè)指定的文件或文件夾重命名。 17).CP:請(qǐng)求在服務(wù)器上拷貝一個(gè)目錄或文件。 使用格式:CP spathname dpathname 第二章開(kāi)發(fā)環(huán)境及工具介紹 2.12.1 C C 語(yǔ)言和語(yǔ)言和 socketsocket 機(jī)制機(jī)制 C 語(yǔ)言是在 70 年代初創(chuàng)建的一種計(jì)算機(jī)語(yǔ)言,它既有匯編語(yǔ)言可以直接訪問(wèn) 機(jī)器硬件的功能,又具有高級(jí)語(yǔ)言面向用戶、可讀性好和易于記

29、憶的優(yōu)點(diǎn),因此 受到廣大程序員的歡迎。C 是一種結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言。它由順序、選擇和循環(huán) 三種基本結(jié)構(gòu)組成,便于實(shí)現(xiàn)由上到下、逐步細(xì)化的結(jié)構(gòu)化程序設(shè)計(jì)。因此,用 C 編寫(xiě)的程序具有容易理解和便于維護(hù)的優(yōu)點(diǎn)。C 語(yǔ)言的函數(shù)結(jié)構(gòu)有利于程序分割 為相對(duì)獨(dú)立的功能模塊,為大型軟件實(shí)現(xiàn)模塊化的程序設(shè)計(jì)創(chuàng)造了條件。該程序 是在 linux 系列下的 C 語(yǔ)言開(kāi)發(fā),主要利用 linux C 下的 API Socket 編程。 Socket 通訊機(jī)制是一種較原始的通訊機(jī)制,通過(guò) Socket 的數(shù)據(jù)表現(xiàn)出來(lái)的形 式是原始字節(jié)流信息,通訊雙方只要在此基礎(chǔ)上按照雙方約定方式進(jìn)行數(shù)據(jù)的格 式化和解析處理工作,這樣

30、才能完成具體的應(yīng)用,即實(shí)現(xiàn)某種協(xié)議的過(guò)程。 Socket 可以看成是在兩個(gè)程序間進(jìn)行通訊連接的兩個(gè)端點(diǎn),一個(gè)程序?qū)⒁欢涡畔?寫(xiě)入一個(gè) Socket 中,該 Socket 將這段信息發(fā)送給另外一個(gè) Socket,以便使這段 信息能傳達(dá)到其他程序中。Socket 有兩種主要的工作方式:有連接的和無(wú)連接的。 有連接方式如流通訊;無(wú)連接方式如數(shù)據(jù)包方式。有連接的 Socket 操作就像一部 電話。它們必須建立一個(gè)連接和一個(gè)呼叫。所有的事情在到達(dá)時(shí)的順序與它們出 發(fā)時(shí)的順序一樣。 socket 的英文原義是“孔”或“插座” 。作為 4BDS UNIX 的進(jìn)程通信機(jī)制,取 后一種意思。通常也稱(chēng)作套接字,用

31、于描述 IP 地址和端口,是一個(gè)通信鏈的句 柄。在 Internet 上的主機(jī)一般運(yùn)行了多個(gè)服務(wù)軟件,同時(shí)提供幾種服務(wù)。每種服 務(wù)都打開(kāi)一個(gè) Socket,并綁定到一個(gè)端口上,不同的端口對(duì)應(yīng)于不同的服務(wù)。 Socket 正如其英文原意那樣,象一個(gè)多孔插座。一臺(tái)主機(jī)猶如布滿各種插座的房 間,每個(gè)插座有一個(gè)編號(hào),有的插座提供 220 伏交流電, 有的提供 110 伏交流電, 有的則提供有線電視節(jié)目。 客戶軟件將插頭插到不同編號(hào)的插座,就可以得到不 同的服務(wù)。 socket 非常類(lèi)似于電話插座。以一個(gè)國(guó)家級(jí)電話網(wǎng)為例。電話的通話雙方相 當(dāng)于相互通信的 2 個(gè)進(jìn)程,區(qū)號(hào)是它的網(wǎng)絡(luò)地址;區(qū)內(nèi)一個(gè)單位的交

32、換機(jī)相當(dāng)于 一臺(tái)主機(jī),主機(jī)分配給每個(gè)用戶的局內(nèi)號(hào)碼相當(dāng)于 socket 號(hào)。任何用戶在通話之 前,首先要占有一部電話機(jī),相當(dāng)于申請(qǐng)一個(gè) socket;同時(shí)要知道對(duì)方的號(hào)碼, 相當(dāng)于對(duì)方有一個(gè)固定的 socket。然后向?qū)Ψ綋芴?hào)呼叫,相當(dāng)于發(fā)出連接請(qǐng)求 (假如對(duì)方不在同一區(qū)內(nèi),還要撥對(duì)方區(qū)號(hào),相當(dāng)于給出網(wǎng)絡(luò)地址) 。對(duì)方假如在 場(chǎng)并空閑(相當(dāng)于通信的另一主機(jī)開(kāi)機(jī)且可以接受連接請(qǐng)求) ,拿起電話話筒,雙 方就可以正式通話,相當(dāng)于連接成功。雙方通話的過(guò)程,是一方向電話機(jī)發(fā)出信 號(hào)和對(duì)方從電話機(jī)接收信號(hào)的過(guò)程,相當(dāng)于向 socket 發(fā)送數(shù)據(jù)和從 socket 接收 數(shù)據(jù)。通話結(jié)束后,一方掛起電話機(jī)相

33、當(dāng)于關(guān)閉 socket,撤消連接。 所謂 socket 通常也稱(chēng)作套接字,應(yīng)用程序通常通過(guò)套接字向網(wǎng)絡(luò)發(fā)出請(qǐng) 求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。以 J2SDK-1.3 為例,Socket 和 ServerSocket 類(lèi)庫(kù)位于 java .net 包中。ServerSocket 用于服務(wù)器端,Socket 是建立網(wǎng)絡(luò)連接時(shí)使用的。 在連接成功時(shí),應(yīng)用程序兩端都會(huì)產(chǎn)生一個(gè) Socket 實(shí)例,操作這個(gè)實(shí)例,完成所 需的會(huì)話。對(duì)于一個(gè)網(wǎng)絡(luò)連接來(lái)說(shuō),套接字是平等的,并沒(méi)有差別,不因?yàn)樵诜?務(wù)器端或在客戶端而產(chǎn)生不同級(jí)別。不管是 Socket 還是 ServerSocket 它們的工 作都是通過(guò) SocketImp

34、l 類(lèi)及其子類(lèi)完成的。 重要的 Socket API:java .net.Socket 繼承于 java.lang.Object,有八個(gè)構(gòu)造器, 其方法并不多,下面介紹使用最頻繁的三個(gè)方法,其它方法大家可以見(jiàn) JDK-1.3 文檔。 Accept 方法用于產(chǎn)生阻塞,直到接受到一個(gè)連接,并且返回一個(gè)客戶端的 Socket 對(duì)象實(shí)例。阻塞是一個(gè)術(shù)語(yǔ),它使程序運(yùn)行暫時(shí)停留在這個(gè)地方,直 到一個(gè)會(huì)話產(chǎn)生,然后程序繼續(xù);通常阻塞是由循環(huán)產(chǎn)生的。 getInputStream 方法獲得網(wǎng)絡(luò)連接輸入,同時(shí)返回一個(gè) InputStream 對(duì)象實(shí)例。 getOutputStream 方法連接的另一端將得到輸入

35、,同時(shí)返回一個(gè) OutputStream 對(duì) 象實(shí)例。注意:其中 getInputStream 和 getOutputStream 方法均可能會(huì)產(chǎn)生一個(gè) IOException,它必須被捕獲,因?yàn)樗鼈兎祷氐牧鲗?duì)象,通常都會(huì)被另一個(gè)流對(duì)象 使用。 根據(jù)連接啟動(dòng)的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過(guò)程可 以分為三個(gè)步驟:服務(wù)器監(jiān)聽(tīng),客戶端請(qǐng)求,連接確認(rèn)。 服務(wù)器監(jiān)聽(tīng):是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等 待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)。 客戶端請(qǐng)求:是指由客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器 端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的

36、套接字, 指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求。 連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽(tīng)到或者說(shuō)接收到客戶端套接字的連接 請(qǐng)求,它就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的 描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接 字繼續(xù)處于監(jiān)聽(tīng)狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求。 2.22.2 如如何何開(kāi)開(kāi)發(fā)發(fā)一一個(gè)個(gè) S Se er rv ve er r- -C Cl li ie en nt t 模模型型的的程程序序 開(kāi)發(fā)原理: 服務(wù)器,使用 ServerSocket 監(jiān)聽(tīng)指定的端口,端口可以隨意指定(由于 1024 以下

37、的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使 用大于 1024 的端口) ,等待客戶連接請(qǐng)求,客戶連接后,會(huì)話產(chǎn)生;在完成會(huì)話 后,關(guān)閉連接。 客戶端,使用 Socket 對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連接請(qǐng)求,一 旦連接成功,打開(kāi)會(huì)話;會(huì)話完成后,關(guān)閉 Socket。客戶端不需要指定打開(kāi)的端 口,通常臨時(shí)的、動(dòng)態(tài)的分配一個(gè) 1024 以上的端口。 Socket 接口是 TCP/IP 網(wǎng)絡(luò)的 API,Socket 接口定義了許多函數(shù)或例程,程序 員可以用它們來(lái)開(kāi)發(fā) TCP/IP 網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué) Internet 上的 TCP/IP 網(wǎng)絡(luò) 編程,必須理解 So

38、cket 接口。Socket 接口設(shè)計(jì)者最先是將接口放在 Unix 操作系 統(tǒng)里面的。如果了解 Unix 系統(tǒng)的輸入和輸出的話,就很容易了解 Socket 了。網(wǎng) 絡(luò)的 Socket 數(shù)據(jù)傳輸是一種特殊的 I/O,Socket 也是一種文件描述符。Socket 也 具有一個(gè)類(lèi)似于打開(kāi)文件的函數(shù)調(diào)用 Socket() ,該函數(shù)返回一個(gè)整型的 Socket 描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^(guò)該 Socket 實(shí)現(xiàn)的。 Server-Client 模型: 2 2. .3 3 常常用用的的 S So oc ck ke et t 類(lèi)類(lèi)型型 有兩種:流式 Socket(SOCK_STREAM)

39、和數(shù)據(jù)報(bào)式 Socket(SOCK_DGRAM) 。流 式是一種面向連接的 Socket,針對(duì)于面向連接的 TCP 服務(wù)應(yīng)用;數(shù)據(jù)報(bào)式 Socket 是一種無(wú)連接的 Socket,對(duì)應(yīng)于無(wú)連接的 UDP 服務(wù)應(yīng)用。Socket 為了建立 Socket,程序可以調(diào)用 Socket 函數(shù),該函數(shù)返回一個(gè)類(lèi)似于文件描述符的句柄。 socket 函數(shù)原型為:int socket(int domain,int type,int protocol);domain 指明所使用的協(xié)議族,通常為 PF_INET,(其與 addrinfo 里的 AF_INET 在現(xiàn)在看 來(lái)是相同的。只是歷史上人們?cè)鴺?gòu)想將 AF(

40、地址家族 address family)與 PF(protocol family 協(xié)議家族)分開(kāi),但實(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 的類(lèi)型: SOCK_STREAM 或 SOCK_DGRAM,Socket 接口還定義了原始 Socket(SOCK_RAW) ,允 許程序使用低層協(xié)議;protocol 通常賦值 0。Socket()調(diào)用返回一個(gè)整型 socket 描述符,你可以在后面

41、的調(diào)用使用它。Socket 描述符是一個(gè)指向內(nèi)部數(shù)據(jù) 結(jié)構(gòu)的指針,它指向描述符表入口。調(diào)用 Socket 函數(shù)時(shí),socket 執(zhí)行體將建立一 個(gè) Socket,實(shí)際上建立一個(gè) Socket意味著為一個(gè) Socket 數(shù)據(jù)結(jié)構(gòu)分配存儲(chǔ)空 間。Socket 執(zhí)行體為你管理描述符表。兩個(gè)網(wǎng)絡(luò)程序之間的一個(gè)網(wǎng)絡(luò)連接包括五 種信息:通信協(xié)議、本地協(xié)議地址、本地主機(jī)端口、遠(yuǎn)端主機(jī)地址和遠(yuǎn)端協(xié)議端 口。Socket 數(shù)據(jù)結(jié)構(gòu)中包含這五種信息。socket 在測(cè)量軟件中的使用也很廣泛 。 Linux 支持多種類(lèi)型的套接口,也叫做套接口尋址族,這是因?yàn)槊糠N類(lèi)型的套 接口都有自己的尋址方法。Linux 支持以下

42、的套接口類(lèi)型: UNIX UNIX 域套接口 INET Internet 地址族 TCP/IP 協(xié)議支持通信。 AX25 Amateur radio X25 IPX Novell IPX APPLE TALK Appletalk DDP X25 X25 這些類(lèi)型的套接口代表各種不同的連接服務(wù)。 Linux 的 BSD 套接口支持下面的幾種套接口類(lèi)型: 1、流式(stream) 這些套接口提供了可靠的雙向順序數(shù)據(jù)流連接。它們可以保證數(shù)據(jù)傳輸中的 完整性、正確性和單一性。I N E T 尋址族中的 T C P 協(xié)議支持這種類(lèi)型的套接口。 2、數(shù)據(jù)報(bào)(Datagram) 這種類(lèi)型的套接口也可以像流式

43、套接口一樣提供雙向的數(shù)據(jù)傳輸,但它們不 能保證傳輸?shù)臄?shù)據(jù)一定能夠到達(dá)目的節(jié)點(diǎn)。即使數(shù)據(jù)能夠到達(dá),也無(wú)法保證數(shù)據(jù) 以正確的順序到達(dá)以及數(shù)據(jù)的單一性、正確性。UDP 協(xié)議支持這種類(lèi)型的套接口。 3、原始(Raw) 這種類(lèi)型的套接口允許進(jìn)程直接存取下層的協(xié)議。 4、可靠遞送消息(Reliable Delivered Messages) 這種套接口和數(shù)據(jù)報(bào)套接口一樣,只能保證數(shù)據(jù)的到達(dá)。 5、順序數(shù)據(jù)包(Sequenced Packets) 這種套接口和流式套接口相同,除了數(shù)據(jù)包的大小是固定的。 6、數(shù)據(jù)包(Packet) 這不是標(biāo)準(zhǔn)的 BSD 套接口類(lèi)型,而是 Linux 中的一種擴(kuò)展。它允許進(jìn)程直

44、接 存取設(shè)備層的數(shù)據(jù)包。 利用套接口進(jìn)行通信的進(jìn)程使用的是客戶機(jī)/服務(wù)器模式。服務(wù)器用來(lái)提供服 務(wù),而客戶機(jī)可以使用服務(wù)器提供的服務(wù),就像一個(gè)提供 w e b 頁(yè)服務(wù)的 We b 服 務(wù)器和一個(gè)讀取并瀏覽 web 頁(yè)的瀏覽器。服務(wù)器首先創(chuàng)建一個(gè)套接口,然后給它 指定一個(gè)名字。名字的形式取決于套接口的地址族,事實(shí)上也就是服務(wù)器的當(dāng)?shù)?地址。系統(tǒng)使用數(shù)據(jù)結(jié)構(gòu) sockaddr 來(lái)指定套接口的名字和地址。一個(gè) INET 套接 口可以包括一個(gè) I P 端口地址。你可以在/etc/services 中查看已經(jīng)注冊(cè)的端口號(hào), 例如,一個(gè) web 頁(yè)面服務(wù)器的端口號(hào)是 80。在服務(wù)器指定套接口的地址以后,它

45、 將監(jiān)聽(tīng)和此地址有關(guān)的連接請(qǐng)求。請(qǐng)求的發(fā)起者,也就是客戶機(jī),將會(huì)創(chuàng)建一個(gè) 套接口,然后再創(chuàng)建連接請(qǐng)求,并指定服務(wù)器的目的地址。對(duì)于一個(gè) INET 套接口 來(lái)說(shuō),服務(wù)器的地址就是它的 I P 地址和端口號(hào)。這些連接請(qǐng)求必須通過(guò)各種協(xié) 議層,然后等待服務(wù)器的監(jiān)聽(tīng)套接口。一旦服務(wù)器接收到了連接請(qǐng)求,它將接受 或者拒絕這個(gè)請(qǐng)求。如果服務(wù)器接受了連接請(qǐng)求,它將創(chuàng)建一個(gè)新的套接口。一 旦服務(wù)器使用一個(gè)套接口來(lái)監(jiān)聽(tīng)連接請(qǐng)求,它就不能使用同樣的套接口來(lái)支持連 接。當(dāng)連接建立起來(lái)以后,連接的兩端都可以發(fā)送和接收數(shù)據(jù)。最后,當(dāng)不再需 要此連接時(shí),可以關(guān)閉此連接。 使用 BSD 套接口的確切含義在于套接口所使用的地

46、址族。設(shè)置一個(gè) TCP/IP 連 接就和設(shè)置一個(gè)業(yè)余無(wú)線電 X.25 連接有很大的不同。和 VFS 一樣,Linux 從 BSD 套接口協(xié)議層中抽象出了套接口界面,此界面負(fù)責(zé)和各種不同的應(yīng)用程序之間進(jìn) 行通信。內(nèi)核初始化時(shí),內(nèi)核中的各個(gè)不同的地址族將會(huì)在 BSD 套接口界面中登 記。稍后當(dāng)應(yīng)用程序創(chuàng)建和使用 BSD 套接口時(shí),就將會(huì)在 BSD 套接口和它支持的 地址族之間建立一個(gè)連接。此連接是通過(guò)交叉關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)和地址族表建立的。 例如,當(dāng)一個(gè)應(yīng)用程序創(chuàng)建一個(gè)新的套接口時(shí),將產(chǎn)生一個(gè)可以被 BSD 套接口使 用的與特定的地址族有關(guān)的套接口創(chuàng)建子過(guò)程。 設(shè)置系統(tǒng)內(nèi)核時(shí),一系列的地址族和協(xié)議將會(huì)

47、保存在協(xié)議向量中。每一個(gè)協(xié) 議都由它的名 字代表,例如, I N E T 和其初始化進(jìn)程的地址。當(dāng)系統(tǒng)啟動(dòng)并初始化套接 口界面時(shí),將會(huì)調(diào)用每一個(gè)協(xié)議的初始化進(jìn)程。對(duì)于套接口地址族來(lái)說(shuō),這意味 著它們注冊(cè)的一系列有關(guān)協(xié)議操作。 這是一系列的子程序,每一個(gè)都執(zhí)行一個(gè)和特定的地址族有關(guān)的操作。已經(jīng) 注冊(cè)的和協(xié)議相關(guān)的操作保存在 pops 向量中,而此向量由一系列指向數(shù)據(jù)結(jié)構(gòu) proto_ops 的指針組成。 數(shù)據(jù)結(jié)構(gòu) proto_ops 包括地址族的類(lèi)型以及指向與特定地址族有關(guān)的套接口 操作程序的指 針。Pops 向量用地址族標(biāo)識(shí)符作為索引。 2 2. .4 4 項(xiàng)項(xiàng)目目用用到到的的 s so oc

48、 ck ke et t 函函數(shù)數(shù)和和編編譯譯環(huán)環(huán)境境 應(yīng)用程序調(diào)用 socket 函數(shù)來(lái)創(chuàng)建一個(gè)能夠進(jìn)行網(wǎng)絡(luò)通信的套接字。 頭文件 #include #include 函數(shù)原型 int socket(int domain, int type, int protocol); 第一個(gè)參數(shù)指定應(yīng)用程序使用的通信協(xié)議的協(xié)議族,對(duì)于 TCP/IP 協(xié)議族,該 參數(shù)置 AF_INET; 第二個(gè)參數(shù)指定要?jiǎng)?chuàng)建的套接字類(lèi)型,流套接字類(lèi)型為 SOCK_STREAM、數(shù)據(jù)報(bào) 套接字類(lèi)型為 SOCK_DGRAM、原始套接字 SOCK_RAW(WinSock 接口并不適用某種特定 的協(xié)議去封裝它,而是由程序自行處理數(shù)

49、據(jù)包以及協(xié)議首部) ; 第三個(gè)參數(shù)指定應(yīng)用程序所使用的通信協(xié)議。此參數(shù)可以指定單個(gè)協(xié)議系列 中的不同傳輸協(xié)議。在 Internet 通訊域中,此參數(shù)一般取值為 0,系統(tǒng)會(huì)根據(jù)套 接字的類(lèi)型決定應(yīng)使用的傳輸層協(xié)議。 該函數(shù)如果調(diào)用成功就返回新創(chuàng)建的套接字的描述符,如果失敗就返回 INVALID_SOCKET。套接字描述符是一個(gè)整數(shù)類(lèi)型的值。每個(gè)進(jìn)程的進(jìn)程空間里都 有一個(gè)套接字描述符表,該表中存放著套接字描述符和套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的對(duì)應(yīng)關(guān) 系。該表中有一個(gè)字段存放新創(chuàng)建的套接字的描述符,另一個(gè)字段存放套接字?jǐn)?shù) 據(jù)結(jié)構(gòu)的地址,因此根據(jù)套接字描述符就可以找到其對(duì)應(yīng)的套接字?jǐn)?shù)據(jù)結(jié)構(gòu)。每 個(gè)進(jìn)程在自己的進(jìn)程空

50、間里都有一個(gè)套接字描述符表但是套接字?jǐn)?shù)據(jù)結(jié)構(gòu)都是在 操作系統(tǒng)的內(nèi)核緩沖里。 source insight 3.5 是一個(gè)面向項(xiàng)目開(kāi)發(fā)的程序編輯器和代碼瀏覽器,它擁 有內(nèi)置的對(duì) C/C+, C#和 Java 等程序的分析。Source Insight 能分析你的源代碼 并在你工作的同時(shí)動(dòng)態(tài)維護(hù)它自己的符號(hào)數(shù)據(jù)庫(kù),并自動(dòng)為你顯示有用的上下文 信息。 Source Insight 不僅僅是一個(gè)強(qiáng)大的程序編輯器,它還能顯示 reference trees,class inheritance diagrams 和 call trees。Source Insight 提供了最 快速的對(duì)源代碼的導(dǎo)航和任何程

51、序編輯器的源信 息。 Source Insight 提供了快速和革新的訪問(wèn)源代碼和源信息的能力。與眾 多其它編輯器產(chǎn)品不同,Source Insight 能在你編輯的同時(shí)分析你的源代碼,為 你提供實(shí)用的信息并立即進(jìn)行分析。 Source Insight 是如今最好用的語(yǔ)言編輯器,支持幾乎所有的語(yǔ)言, 如 C、C+、ASM、PAS、ASP、HTML 等常見(jiàn)的,還支持自己定義關(guān)鍵字,如果您 是一 個(gè)程序員或者網(wǎng)頁(yè)制作人,這個(gè)軟件對(duì)您都是有幫助的! Source Insight 為您提 供了可快速訪問(wèn)源代碼和源信息的功能。Source Insight 相較其它的編輯器產(chǎn)品 來(lái)說(shuō),還可以幫您分析源代碼

52、,并在您編輯的同時(shí)立刻提供給您有用的信息和分 析。 Source Insight 自動(dòng)創(chuàng)建并維護(hù)它自己高性能的符號(hào)數(shù)據(jù)庫(kù),包括函數(shù)、 method、全局變量、結(jié)構(gòu)、類(lèi)和工程源文件里定義的其它類(lèi)型的符號(hào)。Source Insight 可以迅速地更新您的文件信息,即使在您編輯代碼的時(shí)候。而且符號(hào)數(shù) 據(jù)庫(kù)的符號(hào)可以自動(dòng)創(chuàng)建到您的工程文件中。 第三章第三章 FTPFTP 服務(wù)器與客戶端需求分析服務(wù)器與客戶端需求分析 選擇好開(kāi)發(fā)工具,我們用的是 redhat linux 5 內(nèi)核版本是 2.6.18。我們選擇 在局域網(wǎng)內(nèi)通訊,以便于測(cè)試和調(diào)試;既要實(shí)現(xiàn)一個(gè)服務(wù)器,也要為其測(cè)試實(shí)現(xiàn) 一個(gè)客戶端??梢袁F(xiàn)在一

53、臺(tái)計(jì)算機(jī)上實(shí)現(xiàn)兩者并進(jìn)行調(diào)試和測(cè)試,然后再在局域 網(wǎng)中的兩臺(tái)計(jì)算機(jī)之間分別運(yùn)行客戶端和服務(wù)器端。服務(wù)器要處理多個(gè)客戶端, 所以會(huì)采用多進(jìn)程編程,每個(gè)進(jìn)程處理一個(gè)客戶端的請(qǐng)求。所以在編程的時(shí)候會(huì) 用到多進(jìn)程編程,和進(jìn)程間通信等知識(shí)。ftp 服務(wù)器是基于 tcp 的面向連接的安全 的可靠連接,也會(huì)用的 socket 編程,還有 ftp 整個(gè)協(xié)議的具體分析。為了測(cè)試方 便我們的服務(wù)器程序會(huì)和客戶端程序一起進(jìn)行開(kāi)發(fā)。服務(wù)器與客戶端原理圖分析: 一一實(shí)現(xiàn)程序服務(wù)器端實(shí)現(xiàn)的的命令如下:一一實(shí)現(xiàn)程序服務(wù)器端實(shí)現(xiàn)的的命令如下: 1).USER:指用戶名,它帶一個(gè)參數(shù)。 格式為:USER username 在登

54、錄 ftp 服務(wù)器的時(shí)候先用此命令告訴服務(wù)器 那個(gè)用戶要登錄此服務(wù)器。如: USER root 此命令是以 root 用戶登錄服務(wù)器。 2).PASS:指明與用戶名對(duì)應(yīng)的密碼,帶一個(gè)參數(shù)。 格式為:PASS password 當(dāng)服務(wù)器收到來(lái)自客戶端的 USER 命令后,檢查其 合法后就像客戶端發(fā)提示信息要求輸入密碼,客戶端這是就可以向服務(wù)器發(fā)送 PASS 命令加上 root 用戶的密碼。服務(wù)器檢查密碼的正確后,客戶端就與服務(wù)器連 接起來(lái)了。 3).LIST: pathname 參數(shù)表示要列文件的目錄路徑名,若不帶參數(shù),剛使用當(dāng)前目錄。此命令 會(huì)把 pathname 路徑下的文件或目錄按照一定的

55、格式發(fā)送給客戶端讓客戶端顯示 出來(lái)。 4).QUIT:由于要求傳輸文件時(shí)有登陸的過(guò)程,斷開(kāi)連接到應(yīng)有相應(yīng)的注銷(xiāo) 過(guò)程。這個(gè)命令就是從服務(wù)器上注銷(xiāo)的過(guò)程,如果服務(wù)器收到該命令時(shí), 沒(méi)有文件正在傳達(dá)室輸,剛斷開(kāi)控制,連接如果有文件正在傳輸,剛控制 連接仍然保持,直到收到有關(guān)傳輸結(jié)果的應(yīng)答時(shí),服務(wù)器才斷開(kāi)連接。 5).LOAD:取得文件這條命令是 FTP 事務(wù)是用得最多的命令,在請(qǐng)求下載文 件時(shí)都有會(huì)用到。 6).UPDATE:存放文件。 7).WYWT:請(qǐng)求服務(wù)器返回系統(tǒng)類(lèi)型。 8).TYPE:表示文件類(lèi)型,共有四種,所帶參數(shù)也有四種,A,E ,I ,L 分 別對(duì)應(yīng) ASCII,EBCDIC,IM

56、AGB 和 LOCAL 類(lèi)型。 格式為:TYPE type 9).CMD:請(qǐng)求更改服務(wù)器的當(dāng)前目錄這各命令帶一個(gè)參數(shù),參數(shù)表示要更改 的目錄名。 10).DELE:請(qǐng)求刪除服務(wù)器上的文件。 11).MKO:請(qǐng)求在服務(wù)器上新建一個(gè)目錄,這條命令帶一個(gè)參數(shù)指明要建立的 目錄名。 12). PORT:指明數(shù)據(jù)連接的端口號(hào),帶六個(gè)參數(shù)。 格式為:PORT h1,h2,h3,h4,p1,p2 13).CAT:命令顯示某一個(gè)文件的內(nèi)容。 使用格式:CAT filename 打印 filename 文件向終端。 14).TOUCH:請(qǐng)求在服務(wù)器上新建一個(gè)文件,這條命令帶一個(gè)參數(shù)指明要建立 的文件名。 使用格

57、式:TOUCH filename 15).PWD:在服務(wù)器上顯示當(dāng)前工作目錄。 16).MV:請(qǐng)求在服務(wù)器上為某一個(gè)指定的文件或文件夾重命名。 17).CP:請(qǐng)求在服務(wù)器上拷貝一個(gè)目錄或文件。 使用格式:CP spathname dpathname 第四章第四章 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) .軟件總體分析與設(shè)計(jì)軟件總體分析與設(shè)計(jì) 根據(jù)需求分析,按照系統(tǒng)開(kāi)發(fā)的基本觀點(diǎn)對(duì)功能進(jìn)行分解,從功能上可對(duì)模 塊作如下劃分: 1).連接管理模塊:主要完成主機(jī)與服務(wù)器之間的連接與關(guān)閉操作。 2).文件管理模塊:主要完成文件的顯示、新建文件、刪除文件等。 3).文件傳輸模塊:主要完成主機(jī)與服務(wù)器

58、連接成功以后文件的上傳與下載。 4).輔助功能模塊:主要是保存一些登錄信息和一些簡(jiǎn)單的配置信息。 .各模塊具體設(shè)計(jì)各模塊具體設(shè)計(jì) 該 Ftp 客戶端工具用一個(gè) Winsocket 連接上 Ftp 服務(wù)器,然后向其發(fā)送命令。 在這個(gè)過(guò)程中,我們依靠發(fā)送響應(yīng)的機(jī)制。即發(fā)送 Ftp 命令接收返回的 響應(yīng)信息分析該信息執(zhí)行相關(guān)操作發(fā)送下一條命令。在一般意義上, 有一個(gè) socket 用來(lái)連接 Ftp 服務(wù)器的相關(guān)端口(如默認(rèn)的 21) ,它負(fù)責(zé) Ftp 命令 的發(fā)送和接收返回的響應(yīng)信息。一些操作如“進(jìn)入目錄” 、 “刪除文件” ,依靠這個(gè) socket 發(fā)送一條命令就可完成了。 1) 客

59、戶端與服務(wù)器連接 FTP 是建立在 TCP 之上的連接,端口號(hào)使用 21。若客戶端與服務(wù)器之間成功 連接,服務(wù)器將返回字符串,如:220 GMS (Version 5.0) 。 前三個(gè)字符 220 表示客戶端與服務(wù)器成功連接,后面的字符會(huì)因服務(wù)器的不 同而不同,但我們只關(guān)心前三個(gè)字符。 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)證沒(méi)有通過(guò),返回如:530 Not logged in。 用戶名也可以使用匿名,如:USER anonymous,返回如:331 Anonymous access allowed, send identity (e-mail name) as password。 3) 應(yīng)答碼及其含義 110:重新啟動(dòng)標(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ù)連接已打開(kāi),準(zhǔn)備傳送。 150:文件狀態(tài)良好,打開(kāi)數(shù)據(jù)連接。 200:命令成功。 202:命

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論