版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、FTP服務(wù)與客戶端設(shè)計(jì)摘要 FTP為一種主流的網(wǎng)絡(luò)文件傳輸協(xié)議。設(shè)計(jì)和實(shí)現(xiàn)FTP服務(wù)與客戶端,有助于深入理解網(wǎng)絡(luò)編程和FTP協(xié)議,使理論知識(shí)和實(shí)踐結(jié)合起來。本文采用VC+6.0編程工具設(shè)計(jì)和實(shí)現(xiàn)了FTP服務(wù)與客戶端設(shè)計(jì)。其主要設(shè)計(jì)工作為:服務(wù)器端設(shè)計(jì)和客戶端設(shè)計(jì)。服務(wù)器端設(shè)計(jì)模塊主要有:服務(wù)器日志模塊,在線用戶模塊,程序設(shè)置模塊 ,統(tǒng)計(jì)模塊,安全模塊??蛻舳嗽O(shè)計(jì)模塊主要有:連接服務(wù)器模塊,上傳文件模塊,下載文件模塊。通過實(shí)際測(cè)試和應(yīng)用,驗(yàn)證了本文設(shè)計(jì)的正確性。關(guān)鍵詞 FTP 服務(wù)器 客戶端 VC+6.0The design of FTP Server and ClientAbstract FT
2、P is a mainstream network file transfer protocol. Design and Implementation of FTP services and clients will help in-depth understanding of network programming and FTP, and make the theoretical knowledge and practice together. In this paper, using VC + +6.0 programming tool, the FTP server and clien
3、t designe are designed and implemented. The main design work is for: the design of server and client . Server-side design modules are: server logs module, online modules, procedures set module, statistics module, the security module. lient design modules are: connect to server module, upload module,
4、 download files module. Through practical application and testing ,it verifys the correctness of the design of the paper.Keywords FTP Sever Client VC+6.0目 錄第1章緒論21.1FTP介紹31.2VC+6.0介紹61.3 本文工作內(nèi)容8第2章 系統(tǒng)整體設(shè)計(jì)92.1 FTP服務(wù)器整體設(shè)計(jì)92.2 FTP客戶端整體設(shè)計(jì)10第3章 FTP服務(wù)器模塊設(shè)計(jì)113.1服務(wù)器日志模塊113.2 在線用戶模塊163.3 程序設(shè)置模塊193.4 統(tǒng)計(jì)模塊223.
5、5 安全模塊25第4章 FTP客戶端模塊設(shè)計(jì)334.1連接服務(wù)器模塊334.2 下載文件模塊354.3 上傳文件模塊40第5章 結(jié)論和展望44致 謝45參考文獻(xiàn)46第1章 緒論1.1 FTP介紹FTP的主要作用,就是讓用戶連接上一個(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ī)去。以hDz9wb- i(l*R中國Web技術(shù)站N GEHv /X1fG4ma8S(l74LNvh ?以下傳文件為例,當(dāng)啟動(dòng)FTP從遠(yuǎn)程計(jì)算機(jī)拷貝文件時(shí),事實(shí)上啟動(dòng)了兩個(gè)程序:一個(gè)本地機(jī)上的FTP客戶程序:它向FTP服務(wù)
6、器提出拷貝文件的請(qǐng)求。 另一個(gè)是啟動(dòng)在遠(yuǎn)程計(jì)算機(jī)的上的FTP服務(wù)器程序,它響應(yīng)請(qǐng)求把指定的文件傳送到計(jì)算機(jī)中。FTP采用“客戶機(jī)/服務(wù)器”方式,用戶端要在自己的本地計(jì)算機(jī)上安裝FTP客戶程序。FTP客戶程序有字符界面和圖形界面兩種。字符界面的FTP的命令復(fù)雜、繁多。圖形界面的FTP客戶程序,操作上要簡(jiǎn)潔方便的多。簡(jiǎn)單地說,支持FTP協(xié)議的服務(wù)器就是FTP服務(wù)器。 一般來說,用戶聯(lián)網(wǎng)的首要目的就是實(shí)現(xiàn)信息共享,文件傳輸是信息共享非常重要的一個(gè)內(nèi)容之一。Internet上早期實(shí)現(xiàn)傳輸文件,并不是一件容易的事, 我們知道 Internet是一個(gè)非常復(fù)雜的計(jì)算機(jī)環(huán)境,有PC,有工作站,有MAC,有大型
7、機(jī),據(jù)統(tǒng)計(jì)連接在Internet上的計(jì)算機(jī)已有上千萬臺(tái),而這些計(jì)算 機(jī)可能運(yùn)行不同的操作系統(tǒng), 有運(yùn)行Unix的服務(wù)器,也有運(yùn)行Dos、Windows的PC機(jī)和運(yùn)行MacOS的蘋果機(jī)等等,而各種操作系統(tǒng)之間的文件交流問題,需要建立一個(gè)統(tǒng)一的 文件傳輸協(xié)議,這就是所謂的FTP?;诓煌牟僮飨到y(tǒng)有不同的FTP應(yīng)用程序,而所有這些應(yīng)用程序都遵守同一種協(xié)議,這樣用戶就可以把自己的文件傳送給 別人,或者從其它的用戶環(huán)境中獲得文件。中國Web技術(shù)站| MZ5g0mq-|G$與大多數(shù)Internet服務(wù)一樣,F(xiàn)TP也是一個(gè)客戶機(jī)/服務(wù)器系統(tǒng)。用戶通過一個(gè)支持FTP協(xié)議的客戶機(jī)程序,連接到在遠(yuǎn)程主機(jī)上的FT
8、P服務(wù)器程 序。用戶通過客戶機(jī)程序向服務(wù)器程序發(fā)出命令,服務(wù)器程序執(zhí)行用戶所發(fā)出的命令,并將執(zhí)行的結(jié)果返回到客戶機(jī)。比如說,用戶發(fā)出一條命令,要求服務(wù)器向用 戶傳送某一個(gè)文件的一份拷貝,服務(wù)器會(huì)響應(yīng)這條命令,將指定文件送至用戶的機(jī)器上??蛻魴C(jī)程序代表用戶接收到這個(gè)文件,將其存放在用戶目錄中。中國Web技術(shù)站b:Qq5xu;m:c 在FTP的使用當(dāng)中,用戶經(jīng)常遇到兩個(gè)概念:"下載"(Download)和"上載"(Upload)。"下載"文件就是從遠(yuǎn)程主機(jī)拷
9、貝文件至自己的計(jì)算機(jī)上;"上載"文件就是將文件從自己的計(jì)算機(jī)中拷貝至遠(yuǎn)程主機(jī)上。用Internet語言來說,用戶可通過客戶機(jī)程序向(從)遠(yuǎn)程主機(jī)上載(下載)文件。中國Web技術(shù)站'ew'rF/E$DA.v 使用FTP時(shí)必須首先登錄,在遠(yuǎn)程主機(jī)上獲得相應(yīng)的權(quán)限以后,方可上載或下載文件。也就是說,要想同哪一臺(tái)計(jì)算機(jī)傳送文件,就必須具有哪一臺(tái)計(jì)算機(jī)的適當(dāng) 授權(quán)。換言之,除非有用戶ID和口令,否則便無法傳送文件。這種情況違背了Internet的開放性,Internet上的FTP主機(jī)何止千萬,不可
10、能要 求每個(gè)用戶在每一臺(tái)主機(jī)上都擁有帳號(hào)。匿名FTP就是為解決這個(gè)問題而產(chǎn)生的。0P#YK)Z.8N4G,?M U%j 匿名FTP是這樣一種機(jī)制,用戶可通過它連接到遠(yuǎn)程主機(jī)上,并從其下載文件,而無需成為其注冊(cè)用戶。系統(tǒng)管理員建立了一個(gè)特殊的用戶ID,名為anonymous, Internet上的任何人在任何地方都可使用該用戶ID。中國Web技術(shù)站2v1n)En(o!Iw&w7G$F 通過FTP程序連接匿名FTP主機(jī)的方式同連接普通F
11、TP主機(jī)的方式差不多,只是在要求提供用戶標(biāo)識(shí)ID時(shí)必須輸入anonymous,該用戶ID的口令 可以是任意的字符串。習(xí)慣上,用自己的E-mail地址作為口令,使系統(tǒng)維護(hù)程序能夠記錄下來誰在存取這些文件。zkh*a*J8R/E-O 值得注意的是,匿名FTP不適用于所有Internet主機(jī),它只適用于那些提供了這項(xiàng)服務(wù)的主機(jī)。當(dāng)遠(yuǎn)程主機(jī)提供匿名FTP服務(wù)時(shí),會(huì)指定某些目錄向公 眾開放,允許匿名存取。系統(tǒng)中的其余目錄則處于隱匿狀態(tài)。作為一種安全措施,大多數(shù)匿名FTP主機(jī)都允許用戶從其下載文件,而不允許用戶向其上載文件,也 就是說
12、,用戶可將匿名FTP主機(jī)上的所有文件全部拷貝到自己的機(jī)器上,但不能將自己機(jī)器上的任何一個(gè)文件拷貝至匿名FTP主機(jī)上。即使有些匿名FTP主機(jī) 確實(shí)允許用戶上載文件,用戶也只能將文件上載至某一指定上載目錄中。隨后,系統(tǒng)管理員會(huì)去檢查這些文件,他會(huì)將這些文件移至另一個(gè)公共下載目錄中,供其他 用戶下載,利用這種方式,遠(yuǎn)程主機(jī)的用戶得到了保護(hù),避免了有人上載有問題的文件,如帶病毒的文件。中國Web技術(shù)站F:jm dD&V 作為一個(gè)Internet用戶,可通過FTP在任何兩臺(tái)Internet主機(jī)之間拷貝文件。但是,實(shí)際上大多數(shù)
13、人只有一個(gè)Internet帳戶,F(xiàn)TP主 要用于下載公共文件,例如共享軟件、各公司技術(shù)支持文件等。 Internet上有成千上萬臺(tái)匿名FTP主機(jī),這些主機(jī)上存放著數(shù)不清的文件,供用戶免費(fèi)拷貝。實(shí)際上,幾乎所有類型的信息,所有類型的計(jì)算機(jī)程序都可 以在Internet上找到。這是Internet吸引我們的重要原因之一。匿名FTP使用戶有機(jī)會(huì)存取到世界上最大的信息庫,這個(gè)信息庫是日積月累起來 的,并且還在不斷增長(zhǎng),永不關(guān)閉,涉及到幾乎所有主題。而且,這一切是免費(fèi)的。中國Web技術(shù)站1f6Qa-h 匿名FTP是Internet網(wǎng)
14、上發(fā)布軟件的常用方法。Internet之所以能延續(xù)到今天,是因?yàn)槿藗兪褂猛ㄟ^標(biāo)準(zhǔn)協(xié)議提供標(biāo)準(zhǔn)服務(wù)的程序。像這樣的程 序,有許多就是通過匿名FTP發(fā)布的,任何人都可以存取它們。Internet中的有數(shù)目巨大的匿名FTP主機(jī)以及更多的文件,那么到底怎樣才能知道某一 特定文件位于哪個(gè)匿名FTP主機(jī)上的那個(gè)目錄中呢?這正是Archie服務(wù)器所要完成的工作。Archie將自動(dòng)在FTP主機(jī)中進(jìn)行搜索,構(gòu)造一個(gè)包含全部文件目錄信息的數(shù)據(jù)庫,使你可以直接找到所需文件的位置信息。其支持兩種模式,一種方式叫做Standard (也就是 Active,主動(dòng)方式),一種是 Passive (也就是PASV,被動(dòng)方式)
15、。 Standard模式 FTP的客戶端發(fā)送 PORT 命令到FTPserver。Passive模式FTP的客戶端發(fā)送 PASV命令到 FTP Server。Standard模式FTP 客戶端首先和FTP Server的TCP 21端口建立連接,通過這個(gè)通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時(shí)候在這個(gè)通道上發(fā)送PORT命令。 PORT命令包含了客戶端用什么端口接收數(shù)據(jù)。在傳送數(shù)據(jù)的時(shí)候,服務(wù)器端通過自己的TCP 20端口發(fā)送數(shù)據(jù)。 FTP server必須和客戶端建立一個(gè)新的連接用來傳送數(shù)據(jù)。Passive模式在建立控制通道的時(shí)候和Standard模式類似,當(dāng)客戶端通過這個(gè)通道發(fā)送PASV 命令的
16、時(shí)候,F(xiàn)TP server打開一個(gè)位于1024和5000之間的隨機(jī)端口并且通知客戶端在這個(gè)端口上傳送數(shù)據(jù)的請(qǐng)求,然后FTP server 將通過這個(gè)端口進(jìn)行數(shù)據(jù)的傳送,這個(gè)時(shí)候FTP server不再需要建立一個(gè)新的和客戶端之間的連接?,F(xiàn)在的FTP軟件里面包括在IE5以上的版本里面也已經(jīng)支持這兩種模式了。一般一些FTP客戶端的軟件就比較好設(shè)置了,一般都有一個(gè)PASV的選項(xiàng),比如 CuteFTP,傳輸?shù)姆绞蕉加蠸tandard和PASV的選項(xiàng),可以自己進(jìn)行選擇;另外在IE里面如果要設(shè)置成PASV模式的話可以選中工具 Internet選項(xiàng)高級(jí)為FTP站點(diǎn)啟用文件夾視圖,否則就采用Standard模
17、式。1.2 VC+6.0介紹本課題設(shè)計(jì)采用Microsoft Visual C+6.0作為開發(fā)工具。Visual c+是開發(fā)Windows應(yīng)用程序的主流開發(fā)工具,可以利用的資源多。Visual C+ 不僅僅是一個(gè)編譯器。它是一個(gè)全面的應(yīng)用程序開發(fā)環(huán)境,使用它你充分利用具有面向?qū)ο筇匦缘?C+ 來開發(fā)出專業(yè)級(jí)的 Windows 應(yīng)用程序。Visual C+作為一種程序設(shè)計(jì)語言,它同時(shí)也是一個(gè)集成開發(fā)工具,提供了軟件代碼自動(dòng)生成和可視化的資源編輯功能。在使用Visual C+開發(fā)應(yīng)用程序的過程中,系統(tǒng)為我們生成了大量的各種類型的文件。 Visual C+采用的框架
18、是MFC。MFC不僅僅是人們通常理解的一個(gè)類庫。你如果選擇了MFC,也就選擇了一種程序結(jié)構(gòu),一種編程風(fēng)格。MFC 是一個(gè)很大的、擴(kuò)展了的 C+ 類層次結(jié)構(gòu),它能使開發(fā) Windows 應(yīng)用程序變得更加容易。MFC 是在整個(gè) Windows 家族中都是兼容的,也就是說,無論是 Windows3.x、Windows95 還是 Windows NT,所使用的 MFC 是兼容的。每當(dāng)新的 Windows 版本出現(xiàn)時(shí),MFC 也會(huì)得到修改以便使舊的編譯器和代碼能在新的系統(tǒng)中工作。MFC 也回得到擴(kuò)展,添加新的特性、變得更加容易建立應(yīng)用程序。 使用 MFC 的最大優(yōu)點(diǎn)是它為你做了所有最難做的事。MFC 中
19、包含了上成千上萬行正確、優(yōu)化和功能強(qiáng)大的 Windows 代碼。你所調(diào)用的很多成員函數(shù)完成了你自己可能很難完成的工作。從這點(diǎn)上將,MFC 極大地加快了你的程序開發(fā)速度。由于MFC編程方法充分利用了面向?qū)ο蠹夹g(shù)的優(yōu)點(diǎn),它使得我們編程時(shí)極少需要關(guān)心對(duì)象方法的實(shí)現(xiàn)細(xì)節(jié),同時(shí)類庫中的各種對(duì)象的強(qiáng)大功能足以完成我們程序中的絕大部分所需功能,這使得應(yīng)用程序中程序員所需要編寫的代碼大為減少,有力地保證了程序的良好的可調(diào)試性。最重要的是MFC類庫在提供的對(duì)象的各種屬性和方法都是經(jīng)過謹(jǐn)慎的編寫和嚴(yán)格的測(cè)試,可靠性很高,這就保證了使用MFC類庫不會(huì)影響程序的可靠性和正確性。MFC的常用類有:1).CWnd:窗口,
20、它是大多數(shù)“看得見的東西”的父類(Windows里幾乎所有看得見的東西都是一個(gè)窗口,大窗口里有許多小窗口),比如視圖CView、 框架窗口CFrameWnd、工具條CToolBar、對(duì)話框CDialog、按鈕CButton,etc;一個(gè)例外是菜單(CMenu)不是從窗口派生 的。該類很大,一開始也不必學(xué),知道就行了。 2).CDocument文檔,負(fù)責(zé)內(nèi)存數(shù)據(jù)與磁盤的交互。最重要的是OnOpenDocument(讀入),OnSaveDocument(寫盤),Serialize(讀寫)。 3).CView視圖,負(fù)責(zé)內(nèi)存數(shù)據(jù)與用戶的交互。包括數(shù)據(jù)的顯示、用戶操作的響應(yīng)(如菜單的選取、鼠標(biāo)的響應(yīng))。
21、最重要的是OnDraw(重畫窗 口),通常用CWnd:Invalidate()來啟動(dòng)它。另外,它通過消息映射表處理菜單、工具條、快捷鍵和其他用戶消息。你自己的許多功能都要加在 里面,你打交道最多的就是它。 4).CDC設(shè)備文本。無論是顯示器還是打印機(jī),都是畫圖給用戶看。這圖就抽象為CDC。CDC與其他GDI(圖形設(shè)備接口)一起,完成文字和圖形、圖 像的顯示工作。把CDC想象成一張紙,每個(gè)窗口都有一個(gè)CDC相聯(lián)系,負(fù)責(zé)畫窗口。CDC有個(gè)常用子類CClientDC(窗口客戶區(qū)),畫圖通常通過 CClientDC完成。 5).CDialog對(duì)話框。 6).CWinApp應(yīng)用程序類。似于C中的main
22、函數(shù),是程序執(zhí)行的入口和管理者,負(fù)責(zé)程序建立、消滅,主窗口和文檔模板的建立。最常用函數(shù)InitInstance():初始化。 7).CGdiObject及子類,用于向設(shè)備文本畫圖。它們都需要在使用前選進(jìn)DC。 8).CPen筆,畫線。 9).CBrush刷子,填充。 10).CFont字體,控制文字輸出的字體。 11).CBitmap位圖。 12).CPalette調(diào)色板 。 13).CRgn區(qū)域,指定一塊區(qū)域可以用于做特殊處理。 14).CFile文件。最重要的不外是Open(打開),Read(讀入),Write(寫)。 15).CString字符串。封裝了C中的字符數(shù)組,非常實(shí)用。 16)
23、.CPoint點(diǎn),就是(x,y)對(duì)。 17).CRect矩形,就是(left,top,right,bottom)。 18).CSize大小,就是(cx,cy)對(duì)(寬、高)。1.3 本文工作內(nèi)容本文的主要工作為FTP服務(wù)器和客戶端的設(shè)計(jì)。其主要設(shè)計(jì)內(nèi)容有:(1)服務(wù)器設(shè)計(jì): 服務(wù)器日志模塊。 在線用戶模塊。 程序設(shè)置模塊 。 統(tǒng)計(jì)模塊。 安全模塊。(2)客戶端設(shè)計(jì): 連接服務(wù)器模塊。 上傳文件模塊。 下載文件模塊。 第2章 系統(tǒng)整體設(shè)計(jì)本系統(tǒng)的設(shè)計(jì)為FTP服務(wù)器和客戶端設(shè)計(jì),主要設(shè)計(jì)模塊分為服務(wù)器設(shè)計(jì)模塊和客戶端設(shè)計(jì)模塊。服務(wù)器設(shè)計(jì)模塊包括:服務(wù)器日志模塊,在線用戶模塊,程序設(shè)置模塊 ,統(tǒng)計(jì)模塊
24、,安全模塊??蛻舳嗽O(shè)計(jì)模塊包括:連接服務(wù)器模塊,上傳文件模塊,下載文件模塊。2.1 FTP服務(wù)器整體設(shè)計(jì) 服務(wù)器設(shè)計(jì)模塊包括:服務(wù)器日志模塊,在線用戶模塊,程序設(shè)置模塊 ,統(tǒng)計(jì)模塊,安全模塊。其軟件設(shè)計(jì)模塊層次圖如圖2.1所示。圖2.1 FTP服務(wù)器模塊設(shè)計(jì)層次圖Fig. 2.1 FTP server module level design plans服務(wù)器日志模塊。服務(wù)器日志模塊的主要功能為顯示和記錄用戶的登錄信息和一系列的操作信息。例如用戶上傳文件內(nèi)容,上傳時(shí)間;下載文件內(nèi)容,下載時(shí)間等等。在線用戶模塊。在線用戶模塊的主要功能為顯示當(dāng)前連接上服務(wù)器的用戶。程序設(shè)置模塊。程序設(shè)置模塊的主要功
25、能為配置服務(wù)器參數(shù)。例如允許用戶下載,允許用戶上傳等一些列用戶對(duì)服務(wù)器的操作參數(shù)配置。統(tǒng)計(jì)模塊。統(tǒng)計(jì)模塊的主要功能為統(tǒng)計(jì)歷史時(shí)間上,服務(wù)器各種操作的總量并顯示。例如服務(wù)器的總下載量,總上傳量,總連接用戶數(shù)等。安全模塊。安全模塊的主要功能為配置服務(wù)器的安全性。主要配置內(nèi)容為設(shè)置允許接入服務(wù)器的IP和禁止接入服務(wù)器的IP。2.2 FTP客戶端整體設(shè)計(jì)客戶端設(shè)計(jì)模塊包括:連接服務(wù)器模塊,上傳文件模塊,下載文件模塊。其軟件設(shè)計(jì)層次圖如圖2.2所示。圖2.2 FTP客戶端模塊設(shè)計(jì)層次圖Fig. 2.2 FTP client module level design plans連接服務(wù)器模塊。連接服務(wù)器模塊
26、的主要功能為根據(jù)用戶輸入的用戶名、密碼、服務(wù)器名和連接端口,完成客戶端對(duì)服務(wù)器的接入。上傳文件模塊。上傳文件模塊的主要功能為瀏覽本地文件,選擇上傳文件,上傳文件到服務(wù)器。下載文件模塊。下載文件模塊的主要功能為顯示服務(wù)器文件目錄,根據(jù)用戶選擇下載相應(yīng)文件,存儲(chǔ)到本地機(jī)器硬盤上。第3章 FTP服務(wù)器模塊設(shè)計(jì)服務(wù)器的主要設(shè)計(jì)模塊為五個(gè)模塊:服務(wù)器日志模塊,在線用戶模塊,程序設(shè)置模塊 ,統(tǒng)計(jì)模塊,安全模塊。3.1服務(wù)器日志模塊服務(wù)器日志模塊的主要功能為顯示和記錄用戶的登錄信息和一系列的操作信息。其具體顯示和記錄的日志信息為:用戶登錄信息;用戶上傳文件信息;用戶下載文件信息;用戶設(shè)置服務(wù)器文件目錄信息;
27、用戶創(chuàng)建服務(wù)器文件目錄信息;用戶刪除服務(wù)器文件目錄信息;用戶修改服務(wù)器文件目錄信息;用戶下線信息。其程序具體設(shè)計(jì)方法為:當(dāng)服務(wù)器接收到客戶端命令信息時(shí),將信息顯示在服務(wù)器Log信息窗口,并將其記錄在文件中。其程序設(shè)計(jì)流程圖如圖3.1.1所示。圖3.1.1服務(wù)器日志模塊設(shè)計(jì)流程圖Fig. 3.1.1 Server logs modular design flow chart其服務(wù)器日志模塊運(yùn)行界面圖如圖3.1.2所示圖3.1.2 服務(wù)器日志模塊運(yùn)行界面圖Fig. 3.1.2 Server logs module running interface 其設(shè)計(jì)主要實(shí)現(xiàn)程序代碼如下:AddTraceLi
28、ne函數(shù)的主要功能為向服務(wù)器日志信息顯示List控件增加一個(gè)元素,用以顯示到來的信息。void CTracePage:AddTraceLine(int nLevel, LPCTSTR pstrFormat, .)CString str;/ format and write the data we were givenva_list args;va_start(args, pstrFormat);str.FormatV(pstrFormat, args);try/ create new messageCLogMsg *pLogMsg = new CLogMsg;GetLocalTime(&
29、;pLogMsg->m_sysTime);pLogMsg->m_nLevel = nLevel;pLogMsg->m_strText = str;m_QueueLock.Lock();m_LogQueue.AddTail(pLogMsg);m_QueueLock.Unlock();/ schedule log actionPostMessage(WM_ADDTRACELINE);catch(.)OnAddTraceLine函數(shù)為日志消息響應(yīng)函數(shù),當(dāng)服務(wù)器器接收到客戶端的信息時(shí),向服務(wù)器日子模塊發(fā)送日志消息;日子模塊在響應(yīng)函數(shù)OnAddTraceLine中,判斷消息的類別,根據(jù)
30、其類別設(shè)定其消息顯示內(nèi)容和內(nèi)容顯示顏色。LRESULT CTracePage:OnAddTraceLine(WPARAM, LPARAM)CLogMsg *pLogMsg;try/ get first message in the queue/m_QueueLock.Lock();pLogMsg = (CLogMsg *)m_LogQueue.RemoveHead();/m_QueueLock.Unlock();switch(pLogMsg->m_nLevel)case 1:m_TraceList.AddString(pLogMsg->m_strText, RGB(0,130,0)
31、;break;case 2:m_TraceList.AddString(pLogMsg->m_strText, RGB(0,0,255);break;case 3:m_TraceList.AddString(pLogMsg->m_strText, RGB(255,0,0);break;default:m_TraceList.AddString(pLogMsg->m_strText, RGB(0,0,0);break;/*CString strDateTime;strDateTime.Format("%02d/%02d/%02d %02d:%02d:%02d.%03d
32、 ", pLogMsg->m_sysTime.wDay, pLogMsg->m_sysTime.wMonth, pLogMsg->m_sysTime.wYear,pLogMsg->m_sysTime.wHour, pLogMsg->m_sysTime.wMinute, pLogMsg->m_sysTime.wSecond, pLogMsg->m_sysTime.wMilliseconds);switch(pLogMsg->m_nLevel)case 1:m_LogFile << error_lvl << strD
33、ateTime << pLogMsg->m_strText << endl;break;case 2:m_LogFile << warning_lvl << strDateTime << pLogMsg->m_strText << endl;break;case 3:default:m_LogFile << trace_lvl << strDateTime << pLogMsg->m_strText << endl;break; */delete pLogM
34、sg;catch(.)/ something is wrong.return TRUE;OnSize為日子模塊窗口大小改變事件響應(yīng)函數(shù),當(dāng)應(yīng)用程序窗口大小發(fā)生改變時(shí),會(huì)觸發(fā)窗口改變事件。在事件響應(yīng)函數(shù)OnSize中,日子模塊改變窗口大小,使其和主窗口保持大小比例。void CTracePage:OnSize(UINT nType, int cx, int cy) CDialog:OnSize(nType, cx, cy);if (IsWindow(:GetDlgItem(m_hWnd, IDC_TRACE)CRect rect;GetClientRect(rect);/rect.Deflate
35、Rect(5,5,10,10);m_TraceList.MoveWindow(rect);void CTracePage:OnTraceClear() m_TraceList.ResetContent();void CTracePage:OnContextMenu(CWnd* pWnd, CPoint point) CMenu menu;menu.LoadMenu(MAKEINTRESOURCE(IDR_TRACE_MENU);menu.GetSubMenu(0)->TrackPopupMenu(0, point.x, point.y, this, NULL);3.2 在線用戶模塊在線用
36、戶模塊的主要功能為顯示當(dāng)前連接上服務(wù)器的用戶。其顯示內(nèi)容有:用戶登錄用戶名,用戶IP,用戶登錄時(shí)間。顯示方法為使用ClistCtrl控件將顯示內(nèi)容顯示在其上。ClistCtrl控件常用操作方法如下。1)設(shè)置ClistCtrl類型。 DWORD SetExtendedStyle(DWORD dwNewStyle);其中 LVS_EX_CHECKBOXES 表示添加CheckBox, LVS_EX_FULLROWSELECT 表示選擇整行, LVS_EX_GRIDLINES 表示添加表格線。如果設(shè)置了LVS_EX_CHECKBOXES屬性,則可以用
37、;BOOL GetCheck( int nItem ) const;來得到某一行是否Checked。2) 刪除操作。BOOL DeleteItem( int nItem),刪除指定的元素,nItem為要?jiǎng)h除的元素。BOOL DeleteAllItems( ),刪除所有的元素。3) 插入元素操作。int InsertItem( int nItem, LPCTSTR lpszItem),nItem為插入元素索引號(hào),lpszItem為插入元素標(biāo)簽地址。4)插入列操作。int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat
38、= LVCFMT_LEFT, int Width = -1, int nSubItem = -1 ),nCol為新列索引號(hào),lpszColumnHeading列元素存放名稱地址。 5)設(shè)置列寬操作。BOOL SetColumnWidth( int nCol, int cx ), nCol列所引號(hào),cx設(shè)置寬度。6)設(shè)置元素值操作。BOOL SetItemText(int nItem,int nSubItem, LPCTSTR lpszText ),nItem設(shè)置元素,nSubItem設(shè)置子元素,lpszText值內(nèi)容地址。其程序設(shè)計(jì)流程圖如圖3.2.1所示。圖3.2.1 在線用戶模塊
39、設(shè)計(jì)流程圖Fig. 3.2.1 Online user modular design flow chart在線用戶模塊運(yùn)行界面圖如圖3.2.2所示。圖3.2.2 在線用戶模塊運(yùn)行界面圖Fig. 3.2.2 Online user modular running interface其程序設(shè)計(jì)主要實(shí)現(xiàn)代碼如下:OnInitDialog()為在線用戶模塊對(duì)話框初始函數(shù),在線用戶模塊在這里為在線用戶List顯示控件,增添三個(gè)元素:“用戶名”,“IP地址”,“登陸時(shí)間”,用來顯示登陸用戶的信息。BOOL COnlineUsersPage:OnInitDialog() CDialog:OnInitDial
40、og();m_OnlineUsers.InsertColumn(1, "用戶名");m_OnlineUsers.InsertColumn(2, "IP 地址");m_OnlineUsers.InsertColumn(3, "登錄時(shí)間");DWORD dwStyle = m_OnlineUsers.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT; m_OnlineUsers.SetExtendedStyle(dwStyle);return TRUE;AddUser函數(shù)為在線用戶信息顯
41、示List控件,增加元素函數(shù)。當(dāng)有新的用戶登錄服務(wù)器時(shí),在線用戶模塊調(diào)用AddUser函數(shù),顯示新的登錄用戶信息。void COnlineUsersPage:AddUser(DWORD nThreadID, LPCTSTR lpszName, LPCTSTR lpszAddress)CString strThreadID;strThreadID.Format("%d", nThreadID);LVFINDINFO info;info.flags = LVFI_PARTIAL|LVFI_STRING;info.psz = (LPCTSTR)strThreadID;int nI
42、ndex = m_OnlineUsers.FindItem(&info);if (nIndex = -1)nIndex = m_OnlineUsers.InsertItem(0, strThreadID);m_OnlineUsers.SetItemText(nIndex, 1, lpszName);m_OnlineUsers.SetItemText(nIndex, 2, lpszAddress);m_OnlineUsers.SetItemText(nIndex, 3, CTime:GetCurrentTime().Format("%H:%M:%S");RemoveU
43、ser函數(shù)為在線用戶信息顯示List控件,刪除元素函數(shù)。當(dāng)有用戶下線時(shí)或則斷開服務(wù)器連接時(shí),在線用戶模塊調(diào)用RemoveUser函數(shù),刪除相應(yīng)的登錄用戶信息。void COnlineUsersPage:RemoveUser(DWORD nThreadID)LVFINDINFO info;CString strThreadID;strThreadID.Format("%d", nThreadID);info.flags = LVFI_PARTIAL|LVFI_STRING;info.psz = (LPCTSTR)strThreadID;int nIndex = m_Onlin
44、eUsers.FindItem(&info);if (nIndex != -1)m_OnlineUsers.DeleteItem(nIndex);3.3 程序設(shè)置模塊程序設(shè)置模塊的主要功能為配置服務(wù)器參數(shù)。其配置參數(shù)有:FTP連接端口,最大用戶連接數(shù),服務(wù)器開啟方式,服務(wù)器系統(tǒng)信息,Log文件查看和清除。其程序設(shè)計(jì)方法為:系統(tǒng)時(shí)刻監(jiān)控程序設(shè)置模塊,當(dāng)程序設(shè)置模塊觸發(fā)應(yīng)用消息時(shí),系統(tǒng)重新讀入配置信息;當(dāng)程序設(shè)置模塊觸發(fā)查看Log信息時(shí),打開Log文件;當(dāng)程序設(shè)置模塊觸發(fā)清除Log信息時(shí),清空Log文件。其程序流程圖如圖3.3.1所示。圖3.3.1 程序設(shè)置模塊設(shè)計(jì)流程圖Fig. 3.3.
45、1 Procedures settings modular design flow chart程序設(shè)置模塊運(yùn)行界面圖如圖3.3.2所示。圖3.3.2 程序設(shè)置模塊運(yùn)行界面圖Fig. 3.3.2 Procedures settings modular running interface其程序設(shè)計(jì)主要實(shí)現(xiàn)實(shí)現(xiàn)代碼如下:OnDestroy函數(shù)為程序設(shè)置模塊銷毀函數(shù)。當(dāng)主程序退出時(shí),銷毀程序設(shè)置模塊,此時(shí)程序設(shè)置模塊調(diào)用OnDestroy函數(shù)讀取配置參數(shù),并將其寫入配置文件中存儲(chǔ)。void CConfigurationPage:OnDestroy() UpdateData();/ save setti
46、ngsAfxGetApp()->WriteProfileInt("Settings", "Port", m_nPort);AfxGetApp()->WriteProfileInt("Settings", "MaxUsers", m_nMaxUsers);AfxGetApp()->WriteProfileInt("Settings", "Timeout", m_nTimeout);AfxGetApp()->WriteProfileString("
47、;Settings", "WelcomeMsg", m_strWelcomeMessage); AfxGetApp()->WriteProfileString("Settings", "GoodbyeMsg", m_strGoodbyeMessage); AfxGetApp()->WriteProfileInt("Settings", "LaunchOnStartup", m_bLaunchOnStartup);AfxGetApp()->WriteProfileInt
48、("Settings", "StartInTray", m_bStartInTray);AfxGetApp()->WriteProfileInt("Settings", "AutoActivate", m_bAutoActivate);AfxGetApp()->WriteProfileInt("Settings", "LogLevel", m_nLogLevel);AfxGetApp()->WriteProfileString("Settings&
49、quot;, "AppName", m_strApplicationName);CDialogResize:OnDestroy();OnView()函數(shù)為程序設(shè)置模塊的日志文件查看函數(shù)。當(dāng)用點(diǎn)擊查看日志按鈕時(shí),程序設(shè)置模塊調(diào)用OnView()函數(shù)打開日志文件。void CConfigurationPage:OnView() int ExecStatus = (UINT)ShellExecute(m_hWnd, "open", "NOTEPAD.EXE", (LPCTSTR)theApp.m_LogFile.m_FileName, 0,
50、 SW_SHOW); switch(ExecStatus) case 0: MessageBox("Systeem is out of Memory","ShellExecute Error",MB_OK | MB_ICONEXCLAMATION); break; case 2: MessageBox("'NOTEPAD.EXE' is not found !","ShellExecute Error",MB_OK | MB_ICONEXCLAMATION); break; default: if
51、(ExecStatus <= 32) MessageBox("Problem with executing of NOTEPAD.EXE","ShellExecute Error",MB_OK | MB_ICONEXCLAMATION); break; OnClear()函數(shù)為程序設(shè)置模塊的日志文件清空函數(shù)。當(dāng)用點(diǎn)擊查看日志按鈕時(shí),程序設(shè)置模塊調(diào)用OnClear()函數(shù)清空日志文件。void CConfigurationPage:OnClear() theApp.m_LogFile.Clear();OnApply()函數(shù)為程序設(shè)置模塊程序設(shè)置參數(shù)存
52、儲(chǔ)函數(shù)。不同的是,該函數(shù)會(huì)向主程序發(fā)送程序設(shè)置參數(shù)改變消息,使主程序重新讀取配置參數(shù)。當(dāng)用戶修改完程序設(shè)置參數(shù)后,點(diǎn)擊應(yīng)用按鈕后,程序設(shè)置模塊調(diào)用OnApply()函數(shù)使新設(shè)置參數(shù)生效。void CConfigurationPage:OnApply() m_bModified = FALSE;UpdateDialogControls(this, FALSE);AfxGetMainWnd()->SendMessage(WM_COMMAND, IDC_APPLY);/ save settingsAfxGetApp()->WriteProfileInt("Settings&qu
53、ot;, "Port", m_nPort);AfxGetApp()->WriteProfileInt("Settings", "MaxUsers", m_nMaxUsers);AfxGetApp()->WriteProfileInt("Settings", "Timeout", m_nTimeout);AfxGetApp()->WriteProfileString("Settings", "WelcomeMsg", m_strWelcom
54、eMessage); AfxGetApp()->WriteProfileString("Settings", "GoodbyeMsg", m_strGoodbyeMessage); AfxGetApp()->WriteProfileInt("Settings", "LaunchOnStartup", m_bLaunchOnStartup);AfxGetApp()->WriteProfileInt("Settings", "StartInTray", m_bS
55、tartInTray);AfxGetApp()->WriteProfileInt("Settings", "AutoActivate", m_bAutoActivate);AfxGetApp()->WriteProfileInt("Settings", "LogLevel", m_nLogLevel);AfxGetApp()->WriteProfileString("Settings", "AppName", m_strApplicationName);3.
56、4 統(tǒng)計(jì)模塊統(tǒng)計(jì)模塊的主要功能為統(tǒng)計(jì)歷史時(shí)間上,服務(wù)器各種操作的總量并顯示。其統(tǒng)計(jì)參數(shù)有:總連接用戶數(shù),當(dāng)前在線用戶數(shù),文件下載數(shù),文件上傳數(shù),文件下載失敗數(shù),文件上傳失敗數(shù),下載文件總量,上傳文件總量。其設(shè)計(jì)方法為:當(dāng)有用戶登錄成功后,加一總連接用戶數(shù),加一在線用戶數(shù);當(dāng)有用戶下線時(shí),減一在線用戶數(shù);當(dāng)有用戶下載文件時(shí),加一文件總下載數(shù),下載文件總量加上下載文件大小,如果下載失敗,加一下載失敗總數(shù);當(dāng)有上傳文件時(shí),加一上傳文件總數(shù),上傳文件總量加上上傳文件大小,如果上傳失敗,加一上傳文件失敗總數(shù)。其程序設(shè)計(jì)流程圖如圖3.4.1所示。圖3.4.1 統(tǒng)計(jì)模塊程序設(shè)計(jì)流程圖Fig. 3.4.1 S
57、tatistics module design process flow chart其統(tǒng)計(jì)模塊運(yùn)行界面圖如圖3.4.2所示。圖3.4.2 統(tǒng)計(jì)模塊運(yùn)行界面圖Fig. 3.4.2 Statistics module running interface其程序主要設(shè)計(jì)代碼如下:統(tǒng)計(jì)模塊程序在其對(duì)話框初始化程序OnInitDialog()中,向統(tǒng)計(jì)信息顯示List控件中添加顯示元素。BOOL CStatisticsPage:OnInitDialog() CDialogResize:OnInitDialog();InitResizing(FALSE, FALSE, WS_CLIPCHILDREN);m_
58、StatisticsCtrl.InsertColumn(0, "名稱");m_StatisticsCtrl.InsertColumn(1, "值"); m_StatisticsCtrl.InsertItem(0, "總連接用戶數(shù)");m_StatisticsCtrl.SetItemText(0, 1, "0");m_StatisticsCtrl.InsertItem(1, "當(dāng)前在線用戶數(shù)");m_StatisticsCtrl.SetItemText(1, 1, "0");m
59、_StatisticsCtrl.InsertItem(2, "下載文件總量");m_StatisticsCtrl.SetItemText(2, 1, "0");m_StatisticsCtrl.InsertItem(3, "上傳文件總量");m_StatisticsCtrl.SetItemText(3, 1, "0");m_StatisticsCtrl.InsertItem(4, "下載文件失敗數(shù)");m_StatisticsCtrl.SetItemText(4, 1, "0");m_StatisticsCtrl.InsertItem(5, "上傳文件失敗數(shù)&quo
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 航線配船方法課程設(shè)計(jì)
- 水利工程師水利工程設(shè)計(jì)與運(yùn)維
- 營養(yǎng)科護(hù)士助健康飲食
- 科學(xué)實(shí)驗(yàn)小班班級(jí)工作計(jì)劃
- 采礦工程行業(yè)工程師的工作總結(jié)
- 家庭用品行業(yè)采購工作總結(jié)
- 餐飲服務(wù)行業(yè)技術(shù)工作總結(jié)
- 醫(yī)藥健康領(lǐng)域科技整合顧問工作總結(jié)
- 冶金行業(yè)行政后勤工作總結(jié)
- 公務(wù)員工作總結(jié)工作成果與貢獻(xiàn)評(píng)價(jià)
- 【8地RJ期末】安徽省蕪湖市無為市2023-2024學(xué)年八年級(jí)上學(xué)期期末地理試題(含解析)
- 2023學(xué)年杭州市十四中高二數(shù)學(xué)(上)期末考試卷附答案解析
- 中國AI+Agent應(yīng)用研究報(bào)告
- 五級(jí)(程控交換)職業(yè)技能鑒定理論考試題及答案
- 醫(yī)療救護(hù)合作協(xié)議
- 《微元法的應(yīng)用》課件
- 文職-管理學(xué)基礎(chǔ)知識(shí)點(diǎn)
- 標(biāo)準(zhǔn)門面租房合同范本
- 《無人機(jī)飛行操控技術(shù)(微課版)》全套教學(xué)課件
- 2023-2024學(xué)年廣東省深圳高級(jí)中學(xué)七年級(jí)(上)期末歷史試卷
- 2024年房屋租賃補(bǔ)充協(xié)議參考模板(四篇)
評(píng)論
0/150
提交評(píng)論