freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

一個(gè)smtp客戶端程序的設(shè)計(jì)與實(shí)現(xiàn)—畢業(yè)設(shè)計(jì)論文(參考版)

2024-12-03 11:23本頁面
  

【正文】 首先 ,我認(rèn)識(shí)到了基礎(chǔ)知識(shí)的重要性,從項(xiàng)目的整個(gè)研發(fā)流程來看都是以 SMTP的協(xié)議規(guī)定為基礎(chǔ)的,如果基礎(chǔ)知識(shí)掌握不扎實(shí),那么對(duì)于軟件的設(shè)計(jì)研發(fā)就無從下手。本軟件界面簡(jiǎn)單友好,能夠讓用戶快速上手;設(shè)計(jì)良好,模塊劃分清晰、結(jié)構(gòu)工整,具有較強(qiáng)的可擴(kuò)展性;系統(tǒng)性能良好,運(yùn)行速度能夠滿足用戶應(yīng)用。在本次設(shè)計(jì)中,完成了對(duì) SMTP 協(xié)議的分析,通過本軟件能夠根據(jù)用戶提供的用戶名和密碼向?qū)崿F(xiàn)了 SMTP 協(xié)議的服務(wù)器端發(fā)送郵件。經(jīng)過測(cè)試,本系統(tǒng)基本能符合要求,也能實(shí)現(xiàn)預(yù)期的功能。測(cè)試只能盡量避免錯(cuò)誤的產(chǎn)生、消除已發(fā)現(xiàn)的錯(cuò)誤,使程序中的錯(cuò)誤密度達(dá)到盡可能低的程度,減少錯(cuò)誤的引入。 圖 16 身份 驗(yàn)證失敗 在測(cè)試過程中,出現(xiàn)過一些不符合標(biāo)準(zhǔn)的情況,經(jīng)過修改,都基本與最初的設(shè)計(jì)的目標(biāo)符合,能夠完成正常的功能。如圖 15所示。這是一個(gè)“測(cè)試 —— 修改 —— 再測(cè)試 —— 再 修改”的過程,直到整個(gè)系統(tǒng)能正常運(yùn)行,所有功能都能正常實(shí)現(xiàn)。系統(tǒng)測(cè)試中, 把所有的模塊按照設(shè)計(jì)的要求組裝起來同時(shí)進(jìn)行測(cè)試。 系統(tǒng)測(cè)試:把所有的子模塊統(tǒng)一起來,形成軟件的最初版本。 按照上述標(biāo)準(zhǔn)對(duì)子模塊進(jìn)行逐個(gè)測(cè)試,盡量的排除軟件模塊的 BUG。再隨 機(jī) 的選取幾組測(cè)試用例,進(jìn)行測(cè)試。測(cè)試方式如上。 通過與測(cè)試預(yù)期結(jié)果的比對(duì)即可知,該測(cè)試用例是否能夠通過。 2) 傳遞第二個(gè)源數(shù)據(jù),如: wangyoucao(長(zhǎng)度為 3n+ 1)和它的預(yù)期結(jié)果。 如果相同,那么說明此測(cè)試用例通過測(cè)試。以 CBASE64 的測(cè)試工作為例: 1) 準(zhǔn)備源數(shù)據(jù),如: Username(長(zhǎng)度為 3n+ 2)和預(yù)期的 結(jié)果 dXNlcm5hbWU6。根據(jù)得出的結(jié)果來確定子模塊是否能夠通過測(cè)試,如果通過,那么進(jìn)行后繼測(cè)試;如果沒有通過,那么就進(jìn)行代碼的修改,直到能夠通過為止。測(cè)試的方式采用了黑盒與白盒兩種,并且對(duì)有關(guān)的操作進(jìn)行了邊界分析。下面就按照上述的兩個(gè)階段,分別進(jìn)行描述。 圖 14 BASE64編碼算法流程圖 5 軟件測(cè)試 在本章中,講述了在軟件所有模塊完成時(shí)所作的測(cè)試工作。i++){ thissEncode += CBASE64::base64[(int)sTemp[i]] 。 } //使用下面 的循環(huán),根據(jù)得到索引值進(jìn)行查表,用對(duì)應(yīng)的表項(xiàng)生成編碼后的內(nèi)容 for(i=0。0x0f)2))。0x03)4)+((szEncoding[i+1]amp。0xfc)2 ) 。 sTemp += _T(64) 。0x03)4) )。0xfc)2 )。} //如果有一個(gè)剩余的字符,那么用兩個(gè) =補(bǔ)足 if(n%3==1) { //j=4,i=3。 sTemp+=_T((szEncoding[i+2]amp。0x0f)2)+ ((szEncoding[i+2]amp。0xf0)4)。 sTemp+=_T((szEncoding[i]amp。 i+=3,j+=4){ //在循環(huán)內(nèi)即是把 3字符變化為 4個(gè)索引的過程 sTemp += _T((szEncoding[i]amp。 //以每三個(gè)字符為一個(gè)單元對(duì)數(shù)據(jù)進(jìn)行編碼 for(i=0,j=0 。那么無論提供的二進(jìn)制流是什么,都可以把它轉(zhuǎn)化為相應(yīng)的文本。每個(gè)索引值的范圍都是 0- 63,按照該索引值進(jìn)行查表(表由上述的 64 個(gè)字符組成),找出對(duì)應(yīng)的字符。 BASE64 其實(shí)是一種很簡(jiǎn)單的編碼方式,它的原理就是把每三個(gè) ASCII 字符, 共 24 位分解成 4個(gè)字符,每個(gè)字符由原文中的六位。服務(wù)器在接收到這些消息的時(shí)候就會(huì)自動(dòng)解碼然后進(jìn)行驗(yàn)證。提供的驗(yàn)證信息無外乎就是用戶名和密碼。 在執(zhí)行了有關(guān)封裝郵件內(nèi)容的操作后,會(huì)產(chǎn)生一個(gè)滿足 SMTP 協(xié)議的郵件,其內(nèi)容如圖 13 所示。到目前為止,我們已經(jīng)把關(guān)于郵件頭和正文均加入到 CMailMessage 的對(duì)象中,當(dāng)想要獲取這些內(nèi)容時(shí)發(fā)個(gè)消息給它就 行了。 thism_sBody += sTemp 。 sTemp += szFinalBoundary 。 sTemp += sContent 。 sContent += ()。 CBASE64 base64 。 filename=%s\r\n\r\n), pAttachmentGetFilename() , pAttachmentGetFilename())。 //添加附件的分隔標(biāo)識(shí)符 (_T(\r\n\r\nBOUNDARY\r\n)\ _T(ContentType: application/octetstream。 i++){ CString sContent 。 //根據(jù)郵件附件的數(shù)據(jù)添加附件信息 for(int i=0 。 //使用 CBASE64 的加密算法對(duì)內(nèi)容進(jìn)行加密 (thism_sBody , this())。 charset=\gb2312\\r\n)\ _T(ContentTransferEncoding: base64\r\n\r\n)。 AddToHeader(sTemp)。 //定義郵件的分割符號(hào) BOUNDARY sTemp += _T(Contenttype: multipart/mixed。 sTemp =_T(MIMEVersion: )。 //添加正文格式信息 sTemp = _T(XMailer: )+thisGetMailName()。 //format is : Sun, 14 April 07 11:39 GMT sTemp = _T(Date: )。} //添 加標(biāo)題 sTemp = _T(Subject: )+thisGetSubject() 。sTemp += sEmail。 sTemp += sFriendly 。 i++){ thisGetRecipient(sEmail,sFriendly,i)。 for(int i=0 。 圖 12 郵件發(fā)送流程圖 郵件內(nèi)容相關(guān)實(shí)現(xiàn) 與郵件相關(guān)的操作可以分成兩個(gè)部分一部分是有關(guān)郵件頭的操作,另一部分就是有關(guān)文件正文的操作。與其他內(nèi)容沒什么不同。關(guān)于郵件的正文部分,并沒有在上述部分說明。 if( !thisGetResponse(SMTP_SERVER_CLOSE) ){ return FALSE 。 } //最后在郵件內(nèi)容傳送結(jié)束后,應(yīng)該發(fā)送 QUIT 命令來中止連接 sTemp = _T(QUIT\r\n)。 //如果接收到的是 SMTP_SERVER_TASK_FINISH 那么就 說明發(fā)送正確, //否則發(fā)送失敗。 sTemp = _T(\r\n.\r\n)。 if(!thisGetResponse(DATA_IMMEDIATE)){ return FALSE。 sTemp = _T(Data\r\n)。 this((LPCTSTR)password , ())。否則返回錯(cuò)誤。 this((LPCTSTR)username , ())。 this( (LPCTSTR)sAuth , () )。方法如下: //首先判斷連接是否已經(jīng)建立 //如果連接已經(jīng)建立,那么就繼續(xù)進(jìn)行下面的操作;否則返回錯(cuò)誤信息 if( !thism_bConnected ) //發(fā)送身份驗(yàn)證命令。接下來的工作就是傳送數(shù)據(jù)了。 圖 11 建立與服務(wù)器連接算法流程圖 通過上述操作。 利用該通道就可以進(jìn)行郵件傳送操作了。 this((LPCTSTR)helloCommand,gth())。 //創(chuàng)建連接,成功繼續(xù)執(zhí)行,失敗則返回。該方法根據(jù)用戶輸入的參數(shù),調(diào)用底層 API連接到服務(wù)器,連接失敗返回 FALSE,連接成功則返回 TRUE。 圖 10 類關(guān)系圖 核心模塊實(shí)現(xiàn)與核心功能編 碼 在 ,已經(jīng)對(duì)所有的模塊的功能以及相互關(guān)系進(jìn)行了介紹,那么下面將對(duì)其中的核心功能進(jìn)行描述。整個(gè)軟件就是由這樣的一些類有機(jī)“堆砌”而成。而如果在存在附件的情況下, CMailMessage類型的消息則會(huì)包含一個(gè) CMIMEMessage 類型的附件。正如上節(jié)提到的 ,CMyEMailApp 是整個(gè)應(yīng)用程序的入口,在其初始化操作中調(diào)用了 CMyEMailDlg 的相關(guān)方法,生成主界面對(duì)話框。 圖 9 關(guān)于對(duì)話框 模塊之間的關(guān)系 本軟件是由各個(gè)工具類和界面類兩個(gè)大部分構(gòu)成的。 圖 8 程序主界面 CAboutDlg 類:該類與關(guān)于對(duì)話框相對(duì)應(yīng)。它與用戶直接進(jìn)行交互,該界面是否友好,直接影響到用戶體驗(yàn)。提供了與郵件操作有關(guān)的按鈕等觸發(fā)器并定義了操作的具體處理方式。 CMyEMailDlg 類:該類與用戶操作的主界面相對(duì)應(yīng)。通過隱藏的操作自動(dòng)調(diào)用該類的初始化方法 InitInstance就會(huì)初始化應(yīng)用程序。使用該類定義的全局對(duì)象會(huì)由 MFC的框架自動(dòng)傳遞給隱藏的方法。三個(gè)類的作用如下: CMyEMailApp 類:該類由 CWinApp 繼承而來,具有父類的所有特性。在 VC 中,有三種應(yīng)用程序模式可供選擇,分別為:基于對(duì)話框的應(yīng)用程序、單文檔模式的應(yīng)用程序、多文檔模式的應(yīng)用程序。目前的版本中與界面有關(guān)的類有三個(gè): CMyEMailApp 、 CMyEMailDlg 、 CAboutDlg。 實(shí)現(xiàn)軟件的界面類 方便的用戶界面是用戶能夠方便操作最基本保證。length 分別為要解碼的數(shù)據(jù)和長(zhǎng)度。該方法就是根據(jù)編碼后的數(shù)據(jù)得到中間碼的操作。 3) char * CBASE64::GetTempSecret(CString sTemp , int amp。參數(shù) szEncoding 表示要進(jìn)行編碼的數(shù)據(jù)源,而參數(shù)int nSize 表示要進(jìn)行編碼的長(zhǎng)度。本方法根據(jù) BASE64 編碼的定義,對(duì)數(shù)據(jù)進(jìn)行了編碼。 2) TCHAR * CBASE64::Encode(TCHAR* buf , DWORD nSize):該方法的作用是對(duì)制定的數(shù)據(jù)進(jìn)行編碼。 成員 函數(shù) 說明: 1) public DWORD CBASE64::ComputeLen(DWORD size):該方法的作用是計(jì)算編碼后數(shù)據(jù)的長(zhǎng)度 。表示 BASE64編碼所使用的字符表。其類圖 如圖 7所示。該類就是對(duì) BASE64 的算法 進(jìn)行的封裝。為類的調(diào)用者提供了統(tǒng)一的操作接口。如果附件添加成功,則返回 TRUE;否則返回 FALSE。sFilename):該方法的作用是根據(jù)傳遞進(jìn)來的參數(shù)文件名,來把本地文件中的內(nèi)容讀取出來,并添加到當(dāng)前附件對(duì)象中。 3) protected DWORD bufLen:保護(hù)成員變量 ,表示當(dāng)前附件的長(zhǎng)度,單位是字節(jié)。添加到郵件時(shí)使用。其類圖 如圖 6所示。使用該類可以根據(jù)提供的文件名讀取出正確的文件,保存文件名和標(biāo)題。標(biāo)志郵件正文的結(jié)束。在方法中,根據(jù)當(dāng)前添加的郵件附件的個(gè)數(shù)來添加標(biāo)志。并且郵件正文與附件、附件與附件之間要有正確的分隔標(biāo)志。 7) public virtual void PrepareBody():該方法的作用是生成一個(gè)滿足SMTP 協(xié)議的郵件體。只有正確包含上述域的郵件才能被郵件服務(wù)器接收。根據(jù) SMTP 協(xié)議的規(guī)定,郵件的頭包括: From、 To(可重復(fù)多次 )、 Subject、 Date、 XMailer、 MIMEVersion: 、 Contenttype 等多 個(gè)域。傳遞的參數(shù)為要向郵件添加的頭 信息。szEmailAddress 表示郵件的地址, szFriendlyName 表示名稱。 4) BOOL AddRecipient(LPCTSTR szEmailAddress , LPCTSTR szFriendlyName= , RECIPIENTS_TYPE type=TO):作用是向郵件添加接收者信息。分別代表:普通接收者,抄送和密送。參數(shù)是接收者的類型,默認(rèn)值是 TO 類型,意為普通的接收者。 2) public int GetAttachmentNum():該方法的作用是獲取當(dāng)前附件的個(gè)數(shù)。該方法有一個(gè)重載方法,參數(shù)為 CMIMEMessage*,作用是把一個(gè)附件添加到當(dāng)前 郵件。 成員函數(shù)說明: 1) public int AddAttachMent(CString filename):該方法的作用是添加根據(jù)參數(shù)提供的文件名稱,把該文件當(dāng)成附件添加到當(dāng)前的郵件中。在 SMTP 協(xié)議中規(guī)定:一封郵件可以有多個(gè)接收者,每個(gè)接收者需要一個(gè) RCPT TO 命令與之對(duì)應(yīng)。 m_Recipients:私有成員變量。方便調(diào)用者使用該類。對(duì)于每個(gè)域均有一對(duì)對(duì)應(yīng)的存取方法 Get 和 Set 來對(duì)其進(jìn)行操作。 2) public CString m_AttachmentString:表示附件文件的名稱,在給該類的對(duì)象添加有關(guān)的附件信息的時(shí)候 使用。 圖 5 CMailMessage類類圖 成員變量 說明 : 1) public CPtrArray m_Attachments:公有成員變量,表示郵件的
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1