北郵程序設(shè)計實驗報告_第1頁
北郵程序設(shè)計實驗報告_第2頁
北郵程序設(shè)計實驗報告_第3頁
北郵程序設(shè)計實驗報告_第4頁
北郵程序設(shè)計實驗報告_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

北京郵電大學(xué)信息與通信工程學(xué)院第2頁北京郵電大學(xué)電信工程學(xué)院第1頁程序設(shè)計實踐設(shè)計報告課題名稱:郵件客戶端學(xué)生姓名:班級:2班內(nèi)序號:16學(xué)號:2日期:2014.6.4

課題概述1.1課題目標和主要內(nèi)容本課題主要通過MFC的方式,利用SOCKET以及SMTP相關(guān)知識,來實現(xiàn)郵件(可攜帶附件)的定向發(fā)送,借此來復(fù)習(xí)和鞏固C++編程的基本思想;學(xué)習(xí)SOCKET以及SMTP的相關(guān)知識,了解復(fù)雜網(wǎng)絡(luò)應(yīng)用程序的設(shè)計方法,并獨立完成一個網(wǎng)絡(luò)應(yīng)用。1.2系統(tǒng)的主要功能郵件的發(fā)送(不攜帶附件)郵件的發(fā)送(攜帶附件)郵件接收2.系統(tǒng)設(shè)計2.1系統(tǒng)總體框架程序的功能由MyEmailClientDlg.cpp,SMTP.cpp,MailMessage.cpp,Base64.cpp,MIMECode.cpp,MIMEContentAgent.cpp,MIMEMessage.cpp,AppOctetStream.cpp,MyEmailClient.cpp,StdAfx.cpp,TextPlain.cpp來實現(xiàn)。其中MIMECode.cpp,MIMEContentAgent.cpp,MIMEMessage.cpp,AppOctetStream.cpp,TextPlain.cpp來對MIME協(xié)議進行封裝,Base64.cpp來對Base64編碼進行封裝,SMTP.cpp是對SMTP協(xié)議進行封裝,MailMessage.cpp是利用MIME協(xié)議對郵件內(nèi)容的一個處理,最終通過MyEmailClientDlg.cpp來實現(xiàn)郵件的發(fā)送的功能。2.2系統(tǒng)詳細設(shè)計[1]模塊劃分圖及描述協(xié)議模塊:包括網(wǎng)絡(luò)應(yīng)用程序中的各種協(xié)議,包括STMP協(xié)議,MIME協(xié)議等。處理模塊:主要實現(xiàn)對數(shù)據(jù)的進行編碼以及解碼。實現(xiàn)模塊:主要內(nèi)容為郵件發(fā)送的具體步驟,相關(guān)按鈕操作。[2]類關(guān)系圖及描述協(xié)議類:CSMTP,CTEXTPlai,CMIMECode,CMIMEContentAgent,CMIMEMessage,CAppOctetStream,CTextPlain.主要為協(xié)議中信息處理的中作用編碼類:Base64,MailMessage.主要為對郵件信息的處理實現(xiàn)類:CAboutDlg,CMyEmailClientApp,CMyEmailClientDlg.主要為MFC的框架構(gòu)建以及郵件發(fā)送的實現(xiàn)。[3]程序流程圖及描述[4]存儲結(jié)構(gòu)、內(nèi)存分配主要使用字符串數(shù)組來進行存儲,同時還是用套接字來進行消息傳輸。2.3關(guān)鍵算法分析算法1:BOOLCSMTP::Connect()[1]通過SMTP協(xié)議內(nèi)容的判斷對服務(wù)器之間的連接狀況的判斷[2]將SMTP的協(xié)議工作原理進行細化,分為=1\*Arabic1.TCP連接。2.客戶端發(fā)送HELO命令。3.客戶端發(fā)送AUTHLOGIN命令。4.用戶名與密碼的驗證。分別在每一個步驟后對服務(wù)器返回的消息進行分析,判斷是否連接正常。[3]由于沒有其他參量,時間復(fù)雜度為O(1)??臻g復(fù)雜度為O(1)。[4]=1\*Arabic1判斷套接字是否創(chuàng)建成功。=2\*Arabic2判斷是否連接到服務(wù)器。=3\*Arabic3判斷服務(wù)器是否響應(yīng)。=4\*Arabic4發(fā)送HELO命令,同時判斷服務(wù)器響應(yīng)是否正確。=5\*Arabic5發(fā)送AUTHLOGIN命令,同時判斷服務(wù)器響應(yīng)是否正確。=6\*Arabic6發(fā)送經(jīng)過Base64編碼過后的用戶名,同時判斷服務(wù)器響應(yīng)是否正確。=7\*Arabic7發(fā)送經(jīng)過Base64編碼過后的密碼,同時判斷服務(wù)器響應(yīng)是否正確。=8\*Arabic8一切正常,將變量m_bConnected=TRUE。算法2:BOOLCSMTP::transmit_message(CMailMessage*msg)[1]向服務(wù)器發(fā)送郵件[2]根據(jù)SMTP發(fā)送郵件的工作原理,將其分為1.發(fā)送MAIL命令,告知服務(wù)器發(fā)件人的郵件地址。2.發(fā)送RCPT命令,告知服務(wù)器的接收人的郵件地址。3.發(fā)送DATA命令。4.發(fā)送郵件內(nèi)容。5.發(fā)送結(jié)束符,結(jié)束此次發(fā)送。[3]由于FOR循環(huán)中包含msg->GetNumRecipients(),所以時間復(fù)雜度為O(n)??臻g復(fù)雜度為O(1)。[4]1.判斷是否連接服務(wù)器正常。2.發(fā)送MAIL指令及發(fā)件人信息,并判斷服務(wù)器響應(yīng)。3.發(fā)送RCPT指令及收件人信息,多個收件人必須多次發(fā)送,最后判斷服務(wù)器響應(yīng)。4.發(fā)送DATA指令,并判斷服務(wù)器響應(yīng)。5.發(fā)送郵件內(nèi)容。6.發(fā)送結(jié)束符,結(jié)束此次發(fā)送,并判斷服務(wù)器響應(yīng)。算法3:BOOLCSMTP::get_response(UINTresponse_expected)[1]根據(jù)服務(wù)器的響應(yīng)來判斷是否正常[2]首先判斷套接字是否接收成功,然后將得到的響應(yīng)進行分析,判斷結(jié)果[3]時間復(fù)雜度為O(1),空間復(fù)雜度為O(1)[4]1.判斷是否接收套接字正常,不正常直接返回FALSE。2.判斷接收的套接字是否為預(yù)期的,正常直接返回TRUE。3.對接收的服務(wù)器響應(yīng),進行判斷。如果錯誤,將錯誤原因賦值給m_sError。算法4:voidCMyEmailClientDlg::OnButtonAddFile()[1]附件按鈕響應(yīng),實現(xiàn)添加附件的功能[2]從目錄中選擇的文件,一個一個顯示到附件的列表框中。[3]由于和選擇的附件數(shù)目有關(guān),所以時間復(fù)雜度為O(n)??臻g復(fù)雜度為O(1)。[4]1.顯示打開文件對話框。2.將選擇的文件寫入pos變量中。3.將pos中文件路徑用字符串的方式顯示到列表框中。算法5:voidCMyEmailClientDlg::OnSend()[1]發(fā)送按鈕響應(yīng),實現(xiàn)發(fā)送郵件的功能[2]將填入界面中的信息分別賦予其對應(yīng)變量,然后按照順序調(diào)用對應(yīng)的功能函數(shù),實現(xiàn)郵件的發(fā)送。[3]由于收件人以及附件的數(shù)目不確定性,其時間復(fù)雜度為O(nm)。空間復(fù)雜度為O(1)。[4]1.將填入的相應(yīng)信息分別賦值給CMIMEMessagemsg對象。2.根據(jù)列表框中的附件字符串數(shù)目,然后根據(jù)MIME協(xié)議進行添加附件。3.建立CSMTP對象,同時設(shè)置m_SMTP的對應(yīng)屬性。4.連接SMTP服務(wù)器,并判斷是否成功。5.發(fā)送郵件,并判斷是否成功。6.清空附件框,并斷開SMTP服務(wù)器的連接。2.4其他直接使用了封裝好的MIME協(xié)議,大大增強了代碼的簡潔性。程序運行結(jié)果分析包括輸入數(shù)據(jù)來源和格式、輸出顯示方式、主要界面、操作流程、響應(yīng)時間,運行效果等。輸入數(shù)據(jù)來源和格式:鍵盤輸入。直接從鍵盤輸入相應(yīng)的信息,如用戶名,發(fā)件人等信息。格式一般為字符串鼠標輸入。利用鼠標從電腦選擇附件,進行輸入。在列表框中顯示的格式為字符串。輸出顯示方式:主要為對話框直接顯示消息。主要界面:只包含一個主界面,點擊附件按鈕后,會彈出打開文件對話框。操作流程:按照要求輸入用戶名(選擇163或126郵箱,QQ郵箱使用前需要在郵箱中設(shè)置),密碼。然后輸入發(fā)送郵件的發(fā)件人,收件人,標題,內(nèi)容,可以選擇附件。最后點擊發(fā)信即可。退出時,可以點擊退出。運行效果:總結(jié)4.1課題的難點和關(guān)鍵點本次課題相對上次的課題難度加大不少,特別是要運用MFC進行編程,在之前我只是在控制臺上學(xué)習(xí)編程。此外,本次課題的難點在于網(wǎng)絡(luò)應(yīng)用程序的設(shè)計是老師上課時并未仔細說明,主要靠同學(xué)自己自學(xué)。其中包括SMTP協(xié)議,MIME協(xié)議,以及Base64編碼都是新的知識,雖然這幾個文件的代碼網(wǎng)上有,但是要自己學(xué)會使用。在網(wǎng)絡(luò)傳輸中,通過課本明白了套接字的作用及使用,讓我對SMTP的協(xié)議有了更加深刻的理解。關(guān)鍵點在于使用套接字與服務(wù)器進行交互,與服務(wù)器之間發(fā)送消息,并借此發(fā)送消息。根據(jù)SMTP協(xié)議的工作原理,將每一步都使用套接字進行發(fā)送,并進行判斷,成功的實現(xiàn)了與服務(wù)器之間的交互。本課題的評價對于本次課題,算是這個學(xué)期以來碰到的最難得實驗。特別是mfc的知識事先沒有接觸過,不得不通過查閱課外書籍,以及加上百度的力量。本次課題十分經(jīng)典,但因為涉及與網(wǎng)絡(luò)編程,使編程的難度大大增加。不僅考驗我們對舊知識的重新運用,也考察了我們對新知識的學(xué)習(xí)與理解。能夠充分培養(yǎng)學(xué)生的合作意識,培養(yǎng)學(xué)生發(fā)現(xiàn)問題,解決問題的能力,充分發(fā)揮學(xué)生的想象力、創(chuàng)造力,激發(fā)學(xué)生主動學(xué)習(xí)的潛能。在程序運行的時,存在很多警告,自己不能夠充分解決。主要是由于VS程序的升級,使得以前使用的函數(shù)存在危險。但是由于知識水平的有限,在知道了改進的函數(shù)之后,仍然沒有辦法解決這個警告。同時自己對于MIME協(xié)議理解的仍然不夠深刻,無法徹底剖析以及獨立完成。以后,我會更加努力的學(xué)習(xí)網(wǎng)絡(luò)知識,爭取解決這么問題。4.3心得體會本次試驗可謂是折磨人,特別是在一大波期末考試來臨之前要求完成。可喜的是在查閱資料和借助他人一些代碼的情況下,程序總算可以運行出來。通過這次MFC的編程,讓我又學(xué)會了一種新的編譯辦法。相

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論