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

正文內(nèi)容

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

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

下一頁面
 

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