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

正文內(nèi)容

一個smtp客戶端程序的設(shè)計與實現(xiàn)—畢業(yè)設(shè)計論文(文件)

2024-12-23 11:23 上一頁面

下一頁面
 

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