




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、分類號(hào):分類號(hào):TP311.1TP311.1 U U D D C C:D10621-408-(2007)5825-0D10621-408-(2007)5825-0 密密 級(jí):公級(jí):公 開開 編編 號(hào):號(hào): 成成 都都 信信 息息 工工 程程 學(xué)學(xué) 院院 學(xué)學(xué) 位位 論論 文文 FTPFTP 客戶端設(shè)計(jì)與實(shí)現(xiàn)客戶端設(shè)計(jì)與實(shí)現(xiàn) 論論文作者姓名:文作者姓名:何何 坤坤 賢賢 申申請(qǐng)請(qǐng)學(xué)位學(xué)位專業(yè)專業(yè): :計(jì)計(jì)算機(jī)科學(xué)與技算機(jī)科學(xué)與技術(shù)術(shù) 申申請(qǐng)請(qǐng)學(xué)位學(xué)位類別類別: :工學(xué)學(xué)士工學(xué)學(xué)士 指指導(dǎo)導(dǎo)教教師師姓姓名名( (職職稱稱) ): :陶德元(教授)陶德元(教授) 論論文提交日期:文提交日期: 200
2、7 年年 06 月月 10 日日 FTPFTP 客戶端設(shè)計(jì)與實(shí)現(xiàn)客戶端設(shè)計(jì)與實(shí)現(xiàn) 摘摘 要要 互聯(lián)網(wǎng)的一大特點(diǎn)是實(shí)現(xiàn)信息共享,文件傳輸是信息共享的十分重要的內(nèi) 容之一。隨之出現(xiàn)了許多 FTP 服務(wù)器來共享一些信息資源,編寫一個(gè)操作簡(jiǎn)單, 方便的 FTP 客戶端來下載這些資源受到了人們的極大歡迎。 FTP 客戶端軟件是在了解 FTP 工作原理后,利用 C#語言來設(shè)計(jì)和開發(fā)的。 FTP 客戶端分為連接模塊、文件管理模塊、文件傳輸模塊和輔助管理模塊。連 接模塊實(shí)現(xiàn)主機(jī)與服務(wù)器的連接的功能;文件管理模塊實(shí)現(xiàn)新建文件、刪除文 件等功能;文件傳輸模塊實(shí)現(xiàn)主機(jī)與服務(wù)器連接成功后上傳和下載文件功能。 輔助管理
3、模塊實(shí)現(xiàn)一些相關(guān)功能如:讀寫配置 INI 文件。該 FTP 客戶端軟件達(dá) 到了使用方便的目標(biāo),希望開發(fā)軟件的經(jīng)驗(yàn)?zāi)転槭褂?NET 設(shè)計(jì)開發(fā) Windows 應(yīng) 用程序 FTP 客戶端軟件的初學(xué)者提供一些幫助。 關(guān)鍵詞關(guān)鍵詞:.NET;C#;文件傳輸協(xié)議;客戶端 The Design and Implementation of FTP Client Abstract The predominant characteristic of network is information resources sharing. Document transmission is an important co
4、mponent element. Because of this, many File Transfer Protocol (FTP) servers appeared, and won its way into favor. C# programming language is used to develop the FTP client software after comprehending the FTP working principle. And this FTP client software is made up of linking module、file managemen
5、t module、file transmission module and assisted management module. Linking module performs the functions of linking a host and a server; functions of operating on files are implemented in file management module; transmitting files is easy through applying file transmission module; assisted management
6、 module mainly performs the functions of reading and writing the INI files. This FTP client software is usable. And I hope the experience from this software development can do some help to the learners wholl devote their efforts to FTP client software development. Key words: .NET; C#; FTP, Client 目目
7、 錄錄 論文總頁數(shù):21 頁 1引言.1 1.1課題背景.1 1.2國內(nèi)外研究現(xiàn)狀.1 1.3本課題研究的意義.1 1.4本課題的研究方法.2 2技術(shù)背景.2 2.1.NET 技術(shù)簡(jiǎn)介.2 2.2VISUAL STUDIO.NET 簡(jiǎn)介.2 2.3開發(fā)語言選擇.2 2.4FTP 簡(jiǎn)介.3 2.5FTP 工作模式.4 3FTP 軟件需求分析.6 3.1需要完成目標(biāo).6 3.2功能需求.7 3.3環(huán)境需求.7 4FTP 軟件詳細(xì)設(shè)計(jì)與實(shí)現(xiàn).7 4.1軟件總體分析與設(shè)計(jì).7 4.2各模塊具體設(shè)計(jì).7 4.2.1連接管理設(shè)計(jì).7 4.2.2文件管理設(shè)計(jì).9 4.2.3文件傳輸設(shè)計(jì).9 4.2.4輔助功
8、能設(shè)計(jì).10 4.3模塊的程序?qū)崿F(xiàn).10 4.3.1連接管理的程序?qū)崿F(xiàn).10 4.3.2文件管理的程序?qū)崿F(xiàn).11 4.3.3文件傳輸?shù)某绦驅(qū)崿F(xiàn).12 4.3.4輔助功能的程序?qū)崿F(xiàn).13 5軟件測(cè)試.15 5.1測(cè)試前分析.15 5.2測(cè)試的過程與分析.15 5.3測(cè)試小結(jié).17 結(jié) 論.18 參考文獻(xiàn).19 致 謝.20 聲 明.21 1 1 引言引言 1.11.1 課題背景課題背景 FTP 是 Internet 上最早也是最廣的應(yīng)用,直到今天它仍是最重要和最基本 的應(yīng)用之一。用 FTP 將信息下載到本地是一件十分普遍的事。也隨之出現(xiàn)了許 多下載軟件。盡管遠(yuǎn)程登錄(Telnet)提供了訪問遠(yuǎn)程
9、文件的極好方法,但怎 么也比不上使用自己計(jì)算機(jī)中的文件方便。如果用戶想使用其它計(jì)算機(jī)上的文 件,最理想的方法就是把它 COPY 到自己的計(jì)算機(jī)中,以便在本地計(jì)算機(jī)上操作。 FTP 正是完成這項(xiàng)工作的工具,你可以在任意一個(gè)經(jīng)過文件傳輸協(xié)議(FTP)訪 問的公共有效的聯(lián)機(jī)數(shù)據(jù)庫或文檔中找到你想要的任何東西。全世界現(xiàn)在已有 1000 多個(gè)(96 年的數(shù)據(jù))FTP 文件服務(wù)器對(duì)所有 INTERNET 用戶開使用,用戶 可以通過與 Internet 相連到遠(yuǎn)程計(jì)算機(jī),把自己需要的文件傳輸過來或是把自 己的收集傳輸上去與他人共享。傳統(tǒng)的數(shù)據(jù)庫應(yīng)用系統(tǒng)采用的是客戶機(jī)/服務(wù)器 (Client/Server)模
10、式,有高度的交互性,高效的用戶界面等優(yōu)點(diǎn)。 1.21.2 國內(nèi)外研究現(xiàn)狀國內(nèi)外研究現(xiàn)狀 1971 年,第一個(gè) FTP 的 RFC(RFC 114)由 A.K.Bhushan 在 1971 年提出,同 時(shí)由 MIT 與 Harvard 實(shí)驗(yàn)實(shí)現(xiàn);1972 年,RFC 172 提供了主機(jī)間文件傳輸?shù)囊?個(gè)用戶級(jí)協(xié)議;1973 年 2 月,在長(zhǎng)期討論(RFC 265,RFC 294,RFC 354,RFC 385,RFC 430)后,出現(xiàn)了一個(gè)官方文檔 RFC 454;1973 年 8 月,出現(xiàn)了一個(gè) 修訂后的新官方文檔 RFC 542,確立了 FTP 的功能、目標(biāo)和基本模型。當(dāng)時(shí)數(shù) 據(jù)傳輸協(xié)議采用
11、 NCP;1980 年,由于底層協(xié)議從 NCP 改變?yōu)?TCP,RFC 765 定 義了采用 TCP 的 FTP;1985 年,一個(gè)作用持續(xù)至今的官方文檔 RFC 959(STD 9) 出臺(tái)。用 FTP 傳輸文件,本來用戶事先應(yīng)在遠(yuǎn)方系統(tǒng)注冊(cè),但后來為了便于大 家獲取資源,F(xiàn)TP 在互聯(lián)網(wǎng)上有一種特殊的也是非常廣泛的應(yīng)用是匿名 FTP (anonymous FTP)。通過 Internet,任何用戶可以使用 FTP 和一個(gè)公用賬號(hào) (通常賬號(hào)名是 anonymous)去獲得一些公用資源。在 Internet 上目前有許許 多多的這種公用計(jì)算機(jī),我們把這種用來做匿名 FTP 服務(wù)的計(jì)算機(jī)稱作 F
12、TP 服 務(wù)器(FTPSite) ,對(duì)每一個(gè)聯(lián)入 Internet 的用戶,只要知道這些 FTP 服務(wù)器的 地址,就可以與它們連接并獲取上面各種資源。由于 FTP 操作簡(jiǎn)單實(shí)用,開放性 強(qiáng),且能充分利用 Internet 來進(jìn)行信息傳遞與交流,所以目前越來越多的 FTP 服務(wù)器連入 Internet,這樣越來越多的資源就可以通過匿名 FTP 來獲得。 1.31.3 本課題研究的意義本課題研究的意義 進(jìn)一步熟悉.net 開發(fā)環(huán)境,掌握一定開發(fā) Windows 應(yīng)用程序技術(shù)。對(duì)提高 自己的 C#語言編程能力,熟悉 ftp 工作過程。制作一個(gè)界面友好,快速,穩(wěn)定 的下在軟件。對(duì)信息的快速共享起著一定
13、的作用。讓用戶能第一時(shí)間和別人共 同分享信息資源。并希望能給 FTP 客戶端編寫初學(xué)者一些幫助。 1.41.4 本課題的研究方法本課題的研究方法 用 Visual Studio.NET2003 開發(fā) FTP 客戶端軟件。根據(jù)現(xiàn)有的 FTP 軟件進(jìn) 行設(shè)計(jì)與實(shí)現(xiàn)。綜合以前所學(xué)的相關(guān)知識(shí):包括計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)、TCP/IP 詳解、 信息安全相關(guān)知識(shí)等;查閱 Windows 應(yīng)用程序開發(fā)資料,學(xué)習(xí) C#語言,F(xiàn)TP 通 信過程。 2 2技術(shù)背景技術(shù)背景 2.12.1 .NETNET 技術(shù)簡(jiǎn)介技術(shù)簡(jiǎn)介 .NET 技術(shù)是 2000 年微軟公司推出的全新概念,它代表了一個(gè)集合、一個(gè) 環(huán)境、一個(gè)編程的基礎(chǔ)結(jié)構(gòu)
14、。其目的是將互聯(lián)網(wǎng)本身作為構(gòu)建新一代操作系統(tǒng) 的基礎(chǔ),對(duì)互聯(lián)網(wǎng)和操作系統(tǒng)的設(shè)計(jì)思想進(jìn)行延伸。具體地說,.NET 技術(shù)就是 要在不同的網(wǎng)站之間建立起協(xié)定,促進(jìn)網(wǎng)站之間的協(xié)同合作,實(shí)現(xiàn)信息的自動(dòng) 交流,從而幫助用戶最大限度地獲取信息、并對(duì)他們的數(shù)據(jù)進(jìn)行簡(jiǎn)單、高效的 管理。 2.22.2 VisualVisual Studio.NETStudio.NET 簡(jiǎn)介簡(jiǎn)介 Visual Studio .NET 是 Microsoft 為實(shí)現(xiàn)其.NET 技術(shù)而開發(fā)的一整套工具組 件。它把開發(fā)功能強(qiáng)大、性能可靠的企業(yè)網(wǎng)絡(luò)解決方案進(jìn)行了簡(jiǎn)化。通過提供 終端到終端的網(wǎng)絡(luò)開發(fā)能力以及可伸縮、可復(fù)用的服務(wù)器端組件。Vi
15、sual Studio .NET 的主要作用在于:第一、提供加速開發(fā)過程的高效工具;第二、提供對(duì)各 種各樣的網(wǎng)絡(luò)應(yīng)用程序的快速設(shè)計(jì)能力,即程序員可以借助于 Web Forms 在開 發(fā)基于窗體的桌面應(yīng)用程序時(shí)所使用的技巧來創(chuàng)建跨平臺(tái)、跨瀏覽器的網(wǎng)絡(luò)應(yīng) 用程序;第三、利用 XML 和 Web Services 來簡(jiǎn)化分布式。 2.32.3 開發(fā)語言選擇開發(fā)語言選擇 C#是一種現(xiàn)代的面向?qū)ο蟮某绦蜷_發(fā)語言,它使得程序員能夠在新的微軟. NET 平臺(tái)上快速開發(fā)種類豐富的應(yīng)用程序。.NET 平臺(tái)提供了大量的工具和服務(wù), 能夠最大限度地發(fā)掘和使用計(jì)算及通信能力。 由于其一流的面向?qū)ο蟮脑O(shè)計(jì),從構(gòu)建組件形
16、式的高層商業(yè)對(duì)象到構(gòu)造系 統(tǒng)級(jí)應(yīng)用程序你都會(huì)發(fā)現(xiàn) C#將是最合適的。選擇使用 C#語言設(shè)計(jì)的組件能夠用 于 Web 服務(wù),這樣通過 Internet 可以被運(yùn)行于任何操作系統(tǒng)上任何編程語言所 調(diào)用。C#還能為 C+程序員提供快捷的開發(fā)方式又沒有丟掉 C 和 C+的基本特征 強(qiáng)大的控制能力,C#與 C 和 C+有著很大程度上的相似性,熟悉 C 和 C+的開發(fā) 人員很快就能精通 C#。 正如前文所述,C#是專門為.NET 應(yīng)用而開發(fā)出的語言,這從根本上保證了 C#與.NET 框架的完美結(jié)合。在.NET 運(yùn)行庫的支持下,.NET 框架的各種優(yōu)點(diǎn)在 C#中表現(xiàn)得淋漓盡致。讓我們來看看 C#的一些突出的
17、特點(diǎn),相信了解了這些特 點(diǎn)以及本項(xiàng)目后你將會(huì)深深體會(huì)到“#”“SHARP”的真正含義:簡(jiǎn)潔的語 法;精心的面向?qū)ο笤O(shè);與 Web 的緊密結(jié)合;完整的安全性與錯(cuò)誤處理;版本 處理技術(shù);靈活性與兼容性。 2.42.4 FTPFTP 簡(jiǎn)介簡(jiǎn)介 FTP 是 TCP/IP 協(xié)議組中的協(xié)議之一,是英文 File Transfer Protocol 的 縮寫。該協(xié)議是 Internet 文件傳送的基礎(chǔ),它由一系列規(guī)格說明文檔組成,目 標(biāo)是提高文件的共享性,提供非直接使用遠(yuǎn)程計(jì)算機(jī),使存儲(chǔ)介質(zhì)對(duì)用戶透明 和可靠高效地傳送數(shù)據(jù)。簡(jiǎn)單的說,F(xiàn)TP 就是完成兩臺(tái)計(jì)算機(jī)之間的拷貝,從 遠(yuǎn)程計(jì)算機(jī)拷貝文件至自己的計(jì)算機(jī)
18、上,稱之為“下載(download) ”文件。若 將文件從自己計(jì)算機(jī)中拷貝至遠(yuǎn)程計(jì)算機(jī)上,則稱之為“上載(upload) ”文件。 在 TCP/IP 協(xié)議中,F(xiàn)TP 標(biāo)準(zhǔn)命令 TCP 端口號(hào)為 21,Port 方式數(shù)據(jù)端口為 20。 從根本上說,F(xiàn)TP 協(xié)議就是在網(wǎng)絡(luò)中各種不同的計(jì)算機(jī)之間按照 TCP/IP 協(xié) 議來傳輸文件。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 有
19、一個(gè)根本的限制,那就是,如果用戶在某 個(gè)主機(jī)上沒有注冊(cè)獲得授權(quán),即沒有用戶名和口令,就不能與該主機(jī)進(jìn)行文件 傳輸。但匿名 FTP 服務(wù)器除外,它能夠使用戶與遠(yuǎn)程主機(jī)建立連接并以匿名身 份從遠(yuǎn)程主機(jī)上拷貝文件,而不必是該遠(yuǎn)程主機(jī)的注冊(cè)用戶。用戶使用特殊的 用戶名“Anonymous”或“guest”就可有限制地訪問遠(yuǎn)程主機(jī)上公開的文件。 現(xiàn)在許多系統(tǒng)要求用戶將 Emai1 地址作為口令,以便更好地對(duì)訪問者進(jìn)行跟蹤。 出于安全的目的,大部分匿名 FTP 主機(jī)一般只允許遠(yuǎn)程用戶下載(download)文 件,而不允許上載(upload)文件。也就是說,用戶只能從匿名 FTP 主機(jī)拷貝其 需要的文件而
20、不能把文件拷貝到匿名 FTP 主機(jī)。另外,匿名 FTP 主機(jī)還采用了 其他一些保護(hù)措施以保護(hù)自己的文件不至于被用戶修改和刪除,并防止計(jì)算機(jī) 病毒的侵入。匿名 FTP 一直是 Internet 上獲取信息資源的最主要方式,在 Internet 成千上萬的匿名 FTP 主機(jī)中存儲(chǔ)著無以計(jì)數(shù)的文件,這些文件包含了 各種各樣的信息、數(shù)據(jù)和軟件。人們只要知道特定信息資源的主機(jī)地址,就可 以用匿名 FTP 登錄。 2.52.5 FTPFTP 工作模式工作模式 FTP 支持兩種模式,一種方式叫做 Standard(也就是 PORT 方式,主動(dòng)方式), 一種是 Passive(也就是 PASV,被動(dòng)方式)。S
21、tandard 模式 FTP 的客戶端發(fā)送 PORT 命令到 FTP 服務(wù)器。Passive 模式 FTP 的客戶端發(fā)送 PASV 命令到 FTP Server。 1.主動(dòng)方式的 FTP 工作過程:Port 模式 FTP 客戶端首先和 FTP 服務(wù)器的 TCP 21 端口建立連接,通過這個(gè)通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時(shí)候在 這個(gè)通道上發(fā)送 PORT 命令。PORT 命令包含了客戶端用什么端口接收數(shù)據(jù)。在 傳送數(shù)據(jù)的時(shí)候,服務(wù)器端通過自己的 TCP20 端口連接至客戶端的指定端口發(fā) 送數(shù)據(jù)。FTP server 必須和客戶端建立一個(gè)新的連接用來傳送數(shù)據(jù)。 針對(duì) FTP 服務(wù)器前面的防火墻來
22、說,必須允許以下通訊才能支持主動(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 端口到 FTP 服務(wù)器的 20 端口(客戶端發(fā)送 ACK 響應(yīng)到服務(wù)器 的數(shù)據(jù)端口 SC)。 連接過程如下圖 1: 圖 1 FTP 主動(dòng)模式連接過程圖 在第 1 步中,客戶端的命令端口與 FTP 服務(wù)器的命令端口建立連接,并發(fā) 送命令“PO
23、RT 1027” 。然后在第 2 步中,F(xiàn)TP 服務(wù)器給客戶端的命令端口返回 一個(gè)ACK。在第 3 步中,F(xiàn)TP 服務(wù)器發(fā)起一個(gè)從它自己的數(shù)據(jù)端口(20)到客 戶端先前指定的數(shù)據(jù)端口(1027)的連接,最后客戶端在第 4 步中給服務(wù)器端 回一個(gè)ACK。 主動(dòng)方式 FTP 的主要問題實(shí)際上在于客戶端。FTP 的客戶端并沒有實(shí)際建 立一個(gè)到服務(wù)器數(shù)據(jù)端口的連接,它只是簡(jiǎn)單的告訴服務(wù)器自己監(jiān)聽的端口號(hào), 服務(wù)器再回來連接客戶端這個(gè)指定的端口。對(duì)于客戶端的防火墻來說,這是從 外部系統(tǒng)建立到內(nèi)部客戶端的連接,這是通常會(huì)被阻塞的。 2.被動(dòng)方式的 FTP 是這樣的:在被動(dòng)方式 FTP 中,命令連接和數(shù)據(jù)連
24、接都 由客戶端,這樣就可以解決從服務(wù)器到客戶端的數(shù)據(jù)端口的進(jìn)入方向連接被防 火墻過濾掉的問題。當(dāng)開啟一個(gè) FTP 連接時(shí),客戶端打開兩個(gè)任意的非特權(quán)本 地端口(N1024 和 N+1)。第一個(gè)端口連接服務(wù)器的 21 端口,但與主動(dòng)方式的 FTP 不同,客戶端不會(huì)提交 PORT 命令并允許服務(wù)器來回連它的數(shù)據(jù)端口,而是 提交 PASV 命令。這樣做的結(jié)果是服務(wù)器會(huì)開啟一個(gè)任意的非特權(quán)端口 (P1024),并發(fā)送 PORT P 命令給客戶端。然后客戶端發(fā)起從本地端口 N+1 到 服務(wù)器的端口 P 的連接用來傳送數(shù)據(jù)。 對(duì)于服務(wù)器端的防火墻來說,必須允許下面的通訊才能支持被動(dòng)方式的 FTP: 1).
25、從任何端口到服務(wù)器的 21 端口(客戶端初始化的連接 SC)。 2).服務(wù)器的 21 端口到任何大于 1023 的端口(服務(wù)器響應(yīng)到客戶端的控制 端口的連接 SC)。 3).從任何端口到服務(wù)器的大于 1023 端口(入;客戶端初始化數(shù)據(jù)連接到 服務(wù)器指定的任意端口 SC)。 4).服務(wù)器的大于 1023 端口到遠(yuǎn)程的大于 1023 的端口(出;服務(wù)器發(fā)送 ACK 響應(yīng)和數(shù)據(jù)到客戶端的數(shù)據(jù)端口 SC)。 被動(dòng)方式的 FTP 連接過程如下圖 2: 圖 2 FTP 主動(dòng)模式連接過程圖 在第 1 步中,客戶端的命令端口與服務(wù)器的命令端口建立連接,并發(fā)送命 令“PASV” 。然后在第 2 步中,服務(wù)器返
26、回命令PORT 2024,告訴客戶端(服 務(wù)器)用哪個(gè)端口偵聽數(shù)據(jù)連接。在第 3 步中,客戶端初始化一個(gè)從自己的數(shù) 據(jù)端口到服務(wù)器端指定的數(shù)據(jù)端口的數(shù)據(jù)連接。最后服務(wù)器在第 4 步中給客戶 端的數(shù)據(jù)端口返回一個(gè)ACK響應(yīng)。 被動(dòng)方式的 FTP 解決了客戶端的許多問題,但同時(shí)給服務(wù)器端帶來了更多 的問題。最大的問題是需要允許從任意遠(yuǎn)程終端到服務(wù)器高位端口的連接。幸 運(yùn)的是,許多 FTP 守護(hù)程序,包括流行的 WU-FTPD 允許管理員指定 FTP 服務(wù)器 使用的端口范圍。 第二個(gè)問題是客戶端有的支持被動(dòng)模式,有的不支持被動(dòng)模式,必須考慮 如何能支持這些客戶端,以及為他們提供解決辦法。例如,Sol
27、aris 提供的 FTP 命令行工具就不支持被動(dòng)模式,需要第三方的 FTP 客戶端,比如 ncftp。 隨著 WWW 的廣泛流行,許多人習(xí)慣用 web 瀏覽器作為 FTP 客戶端。大多數(shù) 瀏覽器只在訪問 ftp:/這樣的 URL 時(shí)才支持被動(dòng)模式。這到底是好還是壞取決 于服務(wù)器和防火墻的配置。 很多防火墻在設(shè)置的時(shí)候都是不允許接受外部發(fā)起的連接的,所以許多位 于防火墻后或內(nèi)網(wǎng)的 FTP 服務(wù)器不支持 PASV 模式,因?yàn)榭蛻舳藷o法穿過防火墻 打開 FTP 服務(wù)器的高端端口;而許多內(nèi)網(wǎng)的客戶端不能用 PORT 模式登錄 FTP 服 務(wù)器,因?yàn)閺姆?wù)器的 TCP20 無法和內(nèi)部網(wǎng)絡(luò)的客戶端建立一個(gè)
28、新的連接,造 成無法工作。 下面是主動(dòng)與被動(dòng) FTP 優(yōu)缺點(diǎn)的簡(jiǎn)要總結(jié): 主動(dòng) FTP 對(duì) FTP 服務(wù)器的管理有利,但對(duì)客戶端的管理不利。因?yàn)?FTP 服 務(wù)器企圖與客戶端的高位隨機(jī)端口建立連接,而這個(gè)端口很有可能被客戶端的 防火墻阻塞掉。被動(dòng) FTP 對(duì) FTP 客戶端的管理有利,但對(duì)服務(wù)器端的管理不利。 因?yàn)榭蛻舳艘c服務(wù)器建立兩個(gè)連接,其中一個(gè)連到一個(gè)高位隨機(jī)端口,而這 個(gè)端口很有可能被服務(wù)器端的防火墻阻塞掉。 FTP 服務(wù)器的管理員需要他們的服務(wù)器有最多的客戶連接,那么必須得支 持被動(dòng) FTP。我們可以通過為 FTP 服務(wù)器指定一個(gè)有限的端口范圍來減小服務(wù) 器高位端口的暴露。這樣,不
29、在這個(gè)范圍的任何端口會(huì)被服務(wù)器的防火墻阻塞。 雖然這沒有消除所有針對(duì)服務(wù)器的危險(xiǎn),但它大大減少了危險(xiǎn)。 3 3FTPFTP 軟件需求分析軟件需求分析 3.13.1 需要完成目標(biāo)需要完成目標(biāo) 本系統(tǒng)的開發(fā)要求采用 C/S 結(jié)構(gòu),選用所熟悉的開發(fā)工具及開發(fā)環(huán)境進(jìn)行 本系統(tǒng)的設(shè)計(jì)與開發(fā)。 設(shè)計(jì)開發(fā)一個(gè)多功能 FTP 軟件,本設(shè)計(jì)要求實(shí)現(xiàn)部分功能站點(diǎn)的連接、 文件的上傳與下載、文件的重命名、及站點(diǎn)連接功能;能實(shí)現(xiàn)站點(diǎn)的添加與管 理;能實(shí)現(xiàn)相關(guān)個(gè)人的設(shè)置保存(比如站點(diǎn)名及用戶登錄口令等) 。 本畢業(yè)設(shè)計(jì)要求提供能實(shí)現(xiàn)文件傳輸及站點(diǎn)連接等功能的軟件,要求軟件 具有操作簡(jiǎn)便、界面友好等特性;形成一個(gè)真正實(shí)用
30、的、功能完善的 FTP 軟件。 3.23.2 功能需求功能需求 從用戶的角度來分析本軟件應(yīng)具有以下功能:主機(jī)的連接包括直接連接和 連接,直接連接主要是針對(duì)偶爾一次登錄的主機(jī),連接是針對(duì)常用的主機(jī)需要 記錄多個(gè)登錄信息;對(duì)常用的主機(jī)地址及基本配置信息需要進(jìn)行保存;文件能 上傳和下載,判斷文件名是否重復(fù)進(jìn)行詢問是否覆蓋,在斷電的情況下能對(duì)文 件進(jìn)行斷點(diǎn)續(xù)傳,傳輸時(shí)進(jìn)度顯示(獲取文件大小和傳輸速率估計(jì)完成時(shí)間) ; 通過該軟件能新建文件夾,文件名的修改,文件的刪除;能搜索文件名為指定 的文件;界面需要友好,簡(jiǎn)潔。 3.33.3 環(huán)境需求環(huán)境需求 操作系統(tǒng):Windows XP(or Windows
31、2000Advance Server) 網(wǎng)絡(luò)服務(wù)器:FTP 開發(fā)平臺(tái):Visual Studio .NET 2003 4 4FTPFTP 軟件詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)軟件詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 4.14.1軟件總體分析與設(shè)計(jì)軟件總體分析與設(shè)計(jì) 根據(jù)需求分析,按照系統(tǒng)開發(fā)的基本觀點(diǎn)對(duì)功能進(jìn)行分解,從功能上可對(duì) 模塊作如下劃分: 1.連接管理模塊:主要完成主機(jī)與服務(wù)器之間的連接與關(guān)閉操作。 2.文件管理模塊:主要完成文件的顯示、新建文件、刪除文件等。 3.文件傳輸模塊:主要完成主機(jī)與服務(wù)器連接成功以后文件的上傳與下載。 4.輔助功能模塊:主要是保存一些登錄信息和一些簡(jiǎn)單的配置信息。 4.24.2各模塊具體設(shè)計(jì)各模塊
32、具體設(shè)計(jì) .1 連接管理設(shè)計(jì)連接管理設(shè)計(jì) 該 Ftp 客戶端工具用一個(gè) Winsocket 連接上 Ftp 服務(wù)器,然后向其發(fā)送命 令。在這個(gè)過程中,我們依靠發(fā)送響應(yīng)的機(jī)制。即發(fā)送 Ftp 命令接收 返回的響應(yīng)信息分析該信息執(zhí)行相關(guān)操作發(fā)送下一條命令。在一 般意義上,有一個(gè) socket 用來連接 Ftp 服務(wù)器的相關(guān)端口(如默認(rèn)的 21) ,它 負(fù)責(zé) Ftp 命令的發(fā)送和接收返回的響應(yīng)信息。一些操作如“進(jìn)入目錄” 、 “刪除 文件” ,依靠這個(gè) socket 發(fā)送一條命令就可完成了。 1客戶端與服務(wù)器連接 FTP 是建立在 TCP 之上的連接,端口號(hào)使用 21。若客戶端與服務(wù)
33、器之間成 功連接,服務(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,如果用戶名或密碼認(rèn)證沒有通過,返回如:530 Not logged in。 用戶名也可以使
34、用匿名,如: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ù)連接已打開,準(zhǔn)備傳送。 150:文件狀態(tài)良好,打開數(shù)據(jù)連接。 200:命令成功。 202:命令未實(shí)現(xiàn)。 211:系統(tǒng)狀態(tài)或系統(tǒng)幫助響應(yīng)。 212:目錄狀態(tài)。 213:文件狀態(tài)。 214:幫
35、助信息,信息僅對(duì)人類用戶有用。 215:名字系統(tǒng)類型。 220:對(duì)新用戶服務(wù)準(zhǔn)備好。 221:服務(wù)關(guān)閉控制連接,可以退出登錄。 225:數(shù)據(jù)連接打開,無傳輸正在進(jìn)行。 226:關(guān)閉數(shù)據(jù)連接,請(qǐng)求的文件操作成功。 227:進(jìn)入被動(dòng)模式。 230:用戶登錄。 250:請(qǐng)求的文件操作完成。 257:創(chuàng)建“PATHNAME” 。 331:用戶名正確,需要口令。 332:登錄時(shí)需要賬戶信息。 350:請(qǐng)求的文件操作需要進(jìn)一步命令。 421:不能提供服務(wù),關(guān)閉控制連接。 425:不能打開數(shù)據(jù)連接。 426:關(guān)閉連接,中止傳輸。 450:請(qǐng)求的文件操作未執(zhí)行。 451:中止請(qǐng)求的操作:有本地錯(cuò)誤。 452:
36、未執(zhí)行請(qǐng)求的操作:系統(tǒng)存儲(chǔ)空間不足。 500:格式錯(cuò)誤,命令不可識(shí)別。 501:參數(shù)語法錯(cuò)誤。 502:命令未實(shí)現(xiàn)。 503:命令順序錯(cuò)誤。 504:此參數(shù)下的命令功能未實(shí)現(xiàn)。 530:未登錄。 532:存儲(chǔ)文件需要賬戶信息。 550:未執(zhí)行請(qǐng)求的操作。 551:請(qǐng)求操作中止:頁類型未知。 552:請(qǐng)求的文件操作中止,存儲(chǔ)分配溢出。 553:未執(zhí)行請(qǐng)求的操作:文件名不合法。 .2 文件管理設(shè)計(jì)文件管理設(shè)計(jì) 文件管理具有文件的主要是新建文件夾、刪除文件,使用 DirectoryInfo 類 的 Delete()方法和 CreateDirectory()方法來實(shí)現(xiàn)。文件屬性的設(shè)置包
37、括:是否只 讀、是否隱藏、是否歸檔,用 File 類和 Directory 類來完成對(duì)文件和文件夾的屬 性設(shè)置。 .3 文件傳輸設(shè)計(jì)文件傳輸設(shè)計(jì) FTP 協(xié)議用兩個(gè)連接來達(dá)到客戶機(jī)與服務(wù)器之間交換數(shù)據(jù)的目的如圖 3。先 建立第一個(gè)連接控制連接,它用于傳送命令和響應(yīng)。在建立第二個(gè)連接 數(shù)據(jù)連接,用于數(shù)據(jù)傳輸。FTP 提供了兩種方式來建立數(shù)據(jù)連接,一種用 PORT 命令,一種用 PASV 命令。我們使用后者??蛻舳税l(fā)送 PASV 命令給服務(wù)器, 服務(wù)器返回 IP 地址和端口號(hào),用來提供給客戶端進(jìn)行數(shù)據(jù)連接。如:227 Entering Passive Mode (10,175,12
38、5,49,9,17)括號(hào)里 6 個(gè)數(shù)字中前 4 個(gè)數(shù)字 表示 IP 地址 9,后 2 個(gè)數(shù)字表示端口號(hào),這 2 個(gè)數(shù)字按如下公式 計(jì)算端口號(hào):9*256+17=2321 這樣,客戶端就可用 IP 地址 9 和端 口號(hào) 2321 連接服務(wù)器,建立數(shù)據(jù)連接。 圖 3 文件傳輸中的處理過程 .4 輔助功能設(shè)計(jì)輔助功能設(shè)計(jì) 根據(jù)需求功能需要完成文件的上傳及下載必須要完成一些相關(guān)的輔助功能: 1.獲取本地主機(jī)的系統(tǒng)驅(qū)動(dòng)器信息功能,需要在項(xiàng)目引用中添加 COM 標(biāo)簽 中的 Microsoft Scripting Runtime 組件,來獲取系
39、統(tǒng)驅(qū)動(dòng)器信息。 2.目錄選擇功能:在目錄輸入框中可以根據(jù)目錄來顯示所選定的文件夾下 所有文件及文件夾信息,信息包括文件路徑、文件創(chuàng)建日期、文件大小,利用 GetFileSystemEntries()方法來完成。 3.信息保存功能:信息的保存利用讀寫 INI 文件來實(shí)現(xiàn),INI 文件讀寫操 作由調(diào)用系統(tǒng) API 函數(shù)來完成。具體調(diào)用 WritePrivateProfileString()方法 實(shí)現(xiàn)寫入操作,用 GetPrivateProfileString()方法實(shí)現(xiàn)讀操作。 4.34.3模塊的程序?qū)崿F(xiàn)模塊的程序?qū)崿F(xiàn) .1 連接管理的程序?qū)崿F(xiàn)連接管理的程序?qū)崿F(xiàn) 在用戶打開軟件后進(jìn)
40、入主窗體(MFFTP.cs),在連接服務(wù)器輸入框中輸入IP 地址、用戶名及密碼后。先發(fā)送IP地址和端口號(hào)到服務(wù)器,然后對(duì)其應(yīng)答分析, 如果應(yīng)答碼為220表示對(duì)新用戶服務(wù)準(zhǔn)備好,繼續(xù)發(fā)送用戶名返回應(yīng)答碼331表 示用戶名正確需要口令。最后發(fā)送密碼直到返回應(yīng)答碼230表示用戶登錄成功。 其主要代碼程序如下: public void Connect() socketControl = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); IPEndPoint ep = new IPEndPoint(IPA
41、ddress.Parse(RemoteHost), strRemotePort); / 鏈接 try socketControl.Connect(ep); catch(Exception) throw new IOException(Couldnt connect to remote server); / 獲取應(yīng)答碼 ReadReply(); if(iReplyCode != 220) DisConnect(); throw new IOException(strReply.Substring(4); / 登錄 SendCommand(USER +strRemoteUser); if( !(i
42、ReplyCode = 331 | iReplyCode = 230) ) CloseSocketConnect();/關(guān)閉連接 throw new IOException(strReply.Substring(4); if( iReplyCode != 230 ) SendCommand(PASS +strRemotePass); if( !(iReplyCode = 230 | iReplyCode = 202) ) CloseSocketConnect();/關(guān)閉連接 throw new IOException(strReply.Substring(4); bConnected = tr
43、ue; / 切換到目錄 ChDir(strRemotePath); .2 文件管理的程序?qū)崿F(xiàn)文件管理的程序?qū)崿F(xiàn) 對(duì)文件的管理有新建、刪除、及屬性設(shè)置。這里只對(duì)文件夾的刪除操作做 介紹,先實(shí)例化DirectoryInfo類并傳入?yún)?shù)path,然后判斷是文件還是文件夾用 Delete()方法來刪除文件。其主要代碼程序如下: private void MyDeleteFile(string path) /刪除本地文件 try if(path=null) return; DirectoryInfo MyDir=new DirectoryInfo(path); if(MessageBox
44、.Show(是否刪除文件夾:+path+及其所有內(nèi)容?,提 示信息,MessageBoxButtons.YesNo,MessageBoxIcon.Question)=DialogResult.Yes) MyDir.Delete(true); else if(MessageBox.Show(是否刪除文件:+path+及其所有內(nèi)容? ,提示信息,MessageBoxButtons.YesNo,MessageBoxIcon.Question)=DialogResult.Yes) FileInfo fi=new FileInfo(path); fi.Delete(); catch MessageBox
45、.Show(該文件不存在,信息提示 ,MessageBoxButtons.OK,MessageBoxIcon.Information); .3 文件傳輸?shù)某绦驅(qū)崿F(xiàn)文件傳輸?shù)某绦驅(qū)崿F(xiàn) 先進(jìn)行判斷是否與主機(jī)連接成功,獲取要下載的文件名、保存到本機(jī)的路 徑、保存到本機(jī)時(shí)的文件名。在進(jìn)行設(shè)置傳輸模式:二進(jìn)制Binary傳輸或ACSII 傳輸,在創(chuàng)建數(shù)據(jù)連接發(fā)送PASV被動(dòng)模式進(jìn)行傳輸然后對(duì)應(yīng)答命令進(jìn)行判斷。 最后進(jìn)行數(shù)據(jù)傳輸以流方式傳輸。其主要代碼程序如下: public void Get(string strRemoteFileName,string strFolder,string
46、 strLocalFileName) if(!bConnected) Connect(); SetTransferType(TransferType.Binary); if (strLocalFileName.Equals() strLocalFileName = strRemoteFileName; if(!File.Exists(strLocalFileName) Stream st = File.Create(strLocalFileName); st.Close(); FileStream output = new FileStream(strFolder + + strLocalFi
47、leName,FileMode.Create); Socket socketData = CreateDataSocket(); SendCommand(RETR + strRemoteFileName); if(!(iReplyCode = 150 | iReplyCode = 125 | iReplyCode = 226 | iReplyCode = 250) throw new IOException(strReply.Substring(4); while(true) int iBytes = socketData.Receive(buffer, buffer.Length, 0);
48、output.Write(buffer,0,iBytes); if(iBytes = 0) break; output.Close(); if (socketData.Connected) socketData.Close(); if(!(iReplyCode = 226 | iReplyCode = 250) ReadReply(); if(!(iReplyCode = 226 | iReplyCode = 250) throw new IOException(strReply.Substring(4); .4 輔助功能的程序?qū)崿F(xiàn)輔助功能的程序?qū)崿F(xiàn) 當(dāng)需要返回上級(jí)目錄時(shí),先檢
49、查當(dāng)前目錄字符串是否小于 3,如果小于了 3 則表示已經(jīng)是跟目錄了,不能在返回上級(jí)目錄了。其他情況直接用 Substring 來去掉最后一個(gè)目錄。具體辦法是每次取字符串從 0 到最后一個(gè)“” 。然后把 該字符串賦值給 ComboBox。程序代碼如下:其主要代碼程序如下: private void but_Fa_Click(object sender, System.EventArgs e) /返回上級(jí)目錄 string path=boBox1.Text; string newpath; if(path.EndsWith() if(path.Length=3) MessageBox.Show(根
50、目錄了!,系統(tǒng)提示 ,MessageBoxButtons.OK,MessageBoxIcon.Information); return; newpath=path.Substring(0,path.LastIndexOf(); boBox1.Text=newpath.Substring(0,newpath.LastIndexOf(); else if(path.LastIndexOf()!=2) newpath=path.Substring(0,path.LastIndexOf(); boBox1.Text=newpath; else newpath=path.Substring(0,path
51、.LastIndexOf()+1); boBox1.Text=newpath; return; 當(dāng)在第一次登錄主機(jī)時(shí),為方便以后在次登錄該主機(jī)則需要保存其登錄信 息。先把所有的輸入框中的值賦給有代表意思的字符串。如果主機(jī)別名為空則 主機(jī)別名與主機(jī)地址相同。 然后通過 IniWriteValue 方法來寫入 mfftp.ini 文件中,其主要代碼程序 如下: private void but_Ok_Click(object sender, System.EventArgs e) /添加登錄主機(jī)信息 string hostname=this.text_Name.Text.Trim(); strin
52、g hostip=this.text_SerIp.Text.Trim(); string loginname=this.loginName.Text.Trim(); string loginpwd=this.login_Pwd.Text.Trim(); string mydir=this.text_add.Text.Trim(); if(hostname=) hostname=hostip; IniFile inf=new IniFile(); inf.path=.mfftp.ini; int i=Convert.ToInt32(inf.IniReadValue(MFFTP_Options,H
53、ostNum); /string serAdd=inf.IniReadValue(MFFTP_OptionsHost0,HostIp); string ServerName= MFFTP_OptionsHost+i; inf.IniWriteValue(ServerName,HostName,hostname); inf.IniWriteValue(ServerName,HostIp,hostip); inf.IniWriteValue(ServerName,LoginName,loginname); inf.IniWriteValue(ServerName,LoginPwd,loginpwd
54、); inf.IniWriteValue(ServerName,MyDir,mydir); i=i+1; inf.IniWriteValue(MFFTP_Options,HostNum,i.ToString(); this.standm.sername(hostname); this.Close(); 5 5軟件測(cè)試軟件測(cè)試 5.15.1 測(cè)試前分析測(cè)試前分析 本 FTP 軟件測(cè)試,從詳細(xì)設(shè)計(jì)來看,分 4 部分進(jìn)行測(cè)試:首先必須連接到 某網(wǎng)絡(luò),在網(wǎng)絡(luò)連接成功后,進(jìn)行第一步測(cè)試連接測(cè)試,在輸入 IP 地址和登錄 名和密碼后能成功連接到主機(jī);第二步對(duì)文件操作測(cè)試,能新建文件、刪除文 件等操作;第三步在于服務(wù)器連接成功后測(cè)試上傳和下載操作,第四步檢測(cè)文 件在選擇目錄后能顯示根據(jù)路徑來顯示此路徑下所有文件和信息保存入 INI 文 件。 5.25.2 測(cè)試的過程與分析測(cè)試的過程與分析 第一步測(cè)試的是連接操作。連接一般有兩種情況,一種是連接他是用戶經(jīng) 常用要訪問的 FTP 服務(wù)器,需要進(jìn)行保存登錄信息的。另一種是不常訪問只是 偶爾訪問一下的只需要當(dāng)次連接的是快速連接。連接前如下圖 4,輸入 IP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南旅游職業(yè)學(xué)院《中國音樂史與名作欣賞Ⅱ》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西民族大學(xué)《生物技術(shù)創(chuàng)新創(chuàng)業(yè)》2023-2024學(xué)年第二學(xué)期期末試卷
- 遠(yuǎn)程教育中的英語聽力提升實(shí)踐
- 天津醫(yī)科大學(xué)《體育教學(xué)設(shè)計(jì)與實(shí)踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025浙江寧波市余姚市公共交通有限公司招聘25人筆試參考題庫附帶答案詳解
- 勃利縣2024-2025學(xué)年六年級(jí)數(shù)學(xué)小升初摸底考試含解析
- 2025屆甘肅省蘭州市城關(guān)區(qū)五年級(jí)數(shù)學(xué)第二學(xué)期期末綜合測(cè)試試題含答案
- 領(lǐng)導(dǎo)力與大學(xué)生自我品牌的塑造
- 西安航空職業(yè)技術(shù)學(xué)院《SU》2023-2024學(xué)年第二學(xué)期期末試卷
- 鋁合金隔斷合同范本
- 高中雷雨完整省公開課金獎(jiǎng)全國賽課一等獎(jiǎng)微課獲獎(jiǎng)?wù)n件
- 施工現(xiàn)場(chǎng)安全標(biāo)準(zhǔn)化施工手冊(cè)(匯編)
- 《串珠》教案-2024鮮版
- 藥物超敏反應(yīng)綜合征并人類免疫缺陷病毒感染1例及文獻(xiàn)復(fù)習(xí)
- 經(jīng)濟(jì)數(shù)學(xué)(高等職業(yè))全套教學(xué)課件
- 口腔種植學(xué)試題
- 網(wǎng)絡(luò)傳播概論(彭蘭第5版) 課件全套 第1-8章 網(wǎng)絡(luò)媒介的演變-網(wǎng)絡(luò)傳播中的“數(shù)字鴻溝”
- 口服止痛藥物健康宣教
- 超載限位器調(diào)試報(bào)告
- 智能微電網(wǎng)應(yīng)用技術(shù)
- 被執(zhí)行人生活費(fèi)申請(qǐng)書范文
評(píng)論
0/150
提交評(píng)論