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

正文內(nèi)容

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

2025-01-16 11:23上一頁面

下一頁面
  

【正文】 .................................................................................................................... 28 結(jié) 論 ........................................................................................................................ 30 參考文獻 ........................................................................................................................ 30 致 謝 ........................................................................................................................ 31 聲 明 ........................................................................................................................ 32 1 引言 隨著信息技術(shù)的發(fā)展、互聯(lián)網(wǎng)的普及,電子郵件已經(jīng)逐漸稱為人們正常工作和生活中進行溝通的重要手段。本軟件是為了研究 SMTP 協(xié)議而作的一個實驗型項目。主要功能就是傳送電子郵件,當我們使用郵件程序,郵寄 EMail 給對方時,必須通過 SMTP 協(xié)議,將郵件發(fā)送到對方的郵件服務(wù)器上,等待對方查收。 協(xié)議原理 從 1982 年到現(xiàn)在, SMTP 協(xié)議及其相關(guān)的協(xié)議已經(jīng)發(fā)展成一個比較完整的體系,不再是建立之初那個只能傳送文本消息的簡單協(xié)議。其中接收 SMTP 可以是最終接受者也可以是中間傳送者。 圖 1 SMTP工作模型 SMTP 提供傳送郵件的機制,如果接收方與發(fā)送方連接在同一個傳送服務(wù)器時,郵件可以直接由發(fā)送方 主機傳送到接收方主機;或者,當兩者不在同一個傳送服務(wù)器時,通過中繼 SMTP 服務(wù)器傳送。當指定一般的命令或應(yīng)答格式后,參數(shù)會由一些類似于語言的字符串表示出來,如 string> 或 reversepath> ,這里尖括號表示這是一種類似于語言的變量。 MAILSPFROM:reversepathCRLF 此命令告訴接收者新的發(fā)送操作已經(jīng)開始,請復(fù)位所有狀態(tài)表和緩沖區(qū)。 forwardpath>不僅包括郵件,它是主機和目的郵箱的路由表,在其中的第一個主機就是接收命令的主機。如果此命令被接收,接收方返回一個 250 OK 應(yīng)答。 打開與退出 想進行郵件的發(fā)送,就要有一對用于傳送信息的通道。以下的命令是用于打 開和關(guān)閉的: HELO < SP> < domain> < CRLF> QUIT < CRLF> 在 HELLO 命令中,主機自己發(fā)送命令,此命令可以被解釋為:“你好,我是XX” 打開連接的例子: R: 220 Simple Mail Transfer Service Ready S: HELO xx R: 250 關(guān)閉聯(lián)結(jié)的例子 S: QUIT R: 221 Service closing transmission channel 從整個 SMTP 協(xié)議的工作過程來看,整個過程很類似于一對朋友的談話,首先要由客戶端的朋友先向服務(wù)器端開口說 HELO,然后服務(wù)器端回答它的話。因此, 制定 出了 一系列的相關(guān)協(xié)議 來滿足人們?nèi)找孀兓男枨?。下面給出一個簡單的例子來說明驗證的過程,其中 S代表服務(wù)器 ,C 代表客戶端: S: 220 ESMTP server ready C: EHLO S: S: 250 AUTH LOGIN PLAIN??蛻舳税l(fā)送 BASE64 編碼后的用戶名。 3 軟件 開發(fā)背景與環(huán)境 軟件 開發(fā)背景 作為計算機專業(yè)的學(xué)生,在課堂上學(xué)習(xí)到的僅僅是有關(guān)協(xié)議的理論知識,并沒有分析并運用協(xié)議的實際經(jīng)驗。 軟件 開發(fā)環(huán)境 系統(tǒng)環(huán)境 本系統(tǒng)采用的工具軟件有: OS: Windows 2020 Data Center Edition IDE: Visual C++ 企業(yè)版 工具簡介 在本系統(tǒng)中,使用的開發(fā)工具為 Visual C++ 企業(yè)版。 當然它的作用不僅僅如此。目前很多的工具都自帶了幫助文檔,但微軟的 MSDN 確實作的非常出色。 根據(jù)以上分析,需要進行編碼的操作有: 1) 從圖形界面獲取輸入的數(shù)據(jù)的操作。下面與流行的兩種平臺做比較并說明選擇 VC++的原因: 整個工程使用 JAVA 平臺 從誕生至今,一路走來 JAVA 可以說是一帆風順。其類庫并且提供了大量的有關(guān)網(wǎng)絡(luò)操作 API,讓用戶能夠方便的使用并獲得所求的值。在本軟件構(gòu)過程中,定義了 CSMTP、 CMailMessage、 CMIMEMessage、 CBASE64 四個工具類,給程序使用。對于 SMTP的分析以及發(fā)送時發(fā)送端與接收端之間的會話,均由此類完成。在該軟件中該值為 25。 成員函數(shù) 說明: 1) private BOOL GetResponse(UINT responseExpected):該方法根據(jù)獲取的 UINT 類型的參數(shù) responseExpected 來判斷所進行的操作是否正確 。 4) public UINT GetPort():獲取服務(wù)器的端口號。如果是預(yù)期的數(shù)據(jù)那么返回 TRUE,標志發(fā)送成功;如果返回 FALSE,標志發(fā)送失敗。如果查表成功,返回一個合適 的出錯信息;如果查表失敗,則返回未知錯誤。 2) public CString m_AttachmentString:表示附件文件的名稱,在給該類的對象添加有關(guān)的附件信息的時候 使用。在 SMTP 協(xié)議中規(guī)定:一封郵件可以有多個接收者,每個接收者需要一個 RCPT TO 命令與之對應(yīng)。參數(shù)是接收者的類型,默認值是 TO 類型,意為普通的接收者。傳遞的參數(shù)為要向郵件添加的頭 信息。并且郵件正文與附件、附件與附件之間要有正確的分隔標志。其類圖 如圖 6所示。如果附件添加成功,則返回 TRUE;否則返回 FALSE。表示 BASE64編碼所使用的字符表。參數(shù) szEncoding 表示要進行編碼的數(shù)據(jù)源,而參數(shù)int nSize 表示要進行編碼的長度。 實現(xiàn)軟件的界面類 方便的用戶界面是用戶能夠方便操作最基本保證。使用該類定義的全局對象會由 MFC的框架自動傳遞給隱藏的方法。它與用戶直接進行交互,該界面是否友好,直接影響到用戶體驗。而如果在存在附件的情況下, CMailMessage類型的消息則會包含一個 CMIMEMessage 類型的附件。 //創(chuàng)建連接,成功繼續(xù)執(zhí)行,失敗則返回。接下來的工作就是傳送數(shù)據(jù)了。否則返回錯誤。 sTemp = _T(\r\n.\r\n)。關(guān)于郵件的正文部分,并沒有在上述部分說明。 i++){ thisGetRecipient(sEmail,sFriendly,i)。 //format is : Sun, 14 April 07 11:39 GMT sTemp = _T(Date: )。 AddToHeader(sTemp)。 i++){ CString sContent 。 sContent += ()。到目前為止,我們已經(jīng)把關(guān)于郵件頭和正文均加入到 CMailMessage 的對象中,當想要獲取這些內(nèi)容時發(fā)個消息給它就 行了。 BASE64 其實是一種很簡單的編碼方式,它的原理就是把每三個 ASCII 字符, 共 24 位分解成 4個字符,每個字符由原文中的六位。 i+=3,j+=4){ //在循環(huán)內(nèi)即是把 3字符變化為 4個索引的過程 sTemp += _T((szEncoding[i]amp。 sTemp+=_T((szEncoding[i+2]amp。 sTemp += _T(64) 。 } //使用下面 的循環(huán),根據(jù)得到索引值進行查表,用對應(yīng)的表項生成編碼后的內(nèi)容 for(i=0。測試的方式采用了黑盒與白盒兩種,并且對有關(guān)的操作進行了邊界分析。 2) 傳遞第二個源數(shù)據(jù),如: wangyoucao(長度為 3n+ 1)和它的預(yù)期結(jié)果。 按照上述標準對子模塊進行逐個測試,盡量的排除軟件模塊的 BUG。如圖 15所示。在本次設(shè)計中,完成了對 SMTP 協(xié)議的分析,通過本軟件能夠根據(jù)用戶提供的用戶名和密碼向?qū)崿F(xiàn)了 SMTP 協(xié)議的服務(wù)器端發(fā)送郵件。本軟件界面簡單友好,能夠讓用戶快速上手;設(shè)計良好,模塊劃分清晰、結(jié)構(gòu)工整,具有較強的可擴展性;系統(tǒng)性能良好,運行速度能夠滿足用戶應(yīng)用。 圖 16 身份 驗證失敗 在測試過程中,出現(xiàn)過一些不符合標準的情況,經(jīng)過修改,都基本與最初的設(shè)計的目標符合,能夠完成正常的功能。 系統(tǒng)測試:把所有的子模塊統(tǒng)一起來,形成軟件的最初版本。 通過與測試預(yù)期結(jié)果的比對即可知,該測試用例是否能夠通過。根據(jù)得出的結(jié)果來確定子模塊是否能夠通過測試,如果通過,那么進行后繼測試;如果沒有通過,那么就進行代碼的修改,直到能夠通過為止。i++){ thissEncode += CBASE64::base64[(int)sTemp[i]] 。0xfc)2 ) 。} //如果有一個剩余的字符,那么用兩個 =補足 if(n%3==1) { //j=4,i=3。 sTemp+=_T((szEncoding[i]amp。每個索引值的范圍都是 0- 63,按照該索引值進行查表(表由上述的 64 個字符組成),找出對應(yīng)的字符。 在執(zhí)行了有關(guān)封裝郵件內(nèi)容的操作后,會產(chǎn)生一個滿足 SMTP 協(xié)議的郵件,其內(nèi)容如圖 13 所示。 sTemp += sContent 。 //添加附件的分隔標識符 (_T(\r\n\r\nBOUNDARY\r\n)\ _T(ContentType: application/octetstream。 charset=\gb2312\\r\n)\ _T(ContentTransferEncoding: base64\r\n\r\n)。 //添加正文格式信息 sTemp = _T(XMailer: )+thisGetMailName()。 sTemp += sFriendly 。與其他內(nèi)容沒什么不同。 //如果接收到的是 SMTP_SERVER_TASK_FINISH 那么就 說明發(fā)送正確, //否則發(fā)送失敗。 this((LPCTSTR)password , ())。方法如下: //首先判斷連接是否已經(jīng)建立 //如果連接已經(jīng)建立,那么就繼續(xù)進行下面的操作;否則返回錯誤信息 if( !thism_bConnected ) //發(fā)送身份驗證命令。 this((LPCTSTR)helloCommand,gth())。整個軟件就是由這樣的一些類有機“堆砌”而成。 圖 8 程序主界面 CAboutDlg 類:該類與關(guān)于對話框相對應(yīng)。通過隱藏的操作自動調(diào)用該類的初始化方法 InitInstance就會初始化應(yīng)用程序。目前的版本中與界面有關(guān)的類有三個: CMyEMailApp 、 CMyEMailDlg 、 CAboutDlg。 3) char * CBASE64::GetTempSecret(CString sTemp , int amp。 成員 函數(shù) 說明: 1) public DWORD CBASE64::ComputeLen(DWORD size):該方法的作用是計算編碼后數(shù)據(jù)的長度 。為類的調(diào)用者提供了統(tǒng)一的操作接口。添加到郵件時使用。在方法中,根據(jù)當前添加的郵件附件的個數(shù)來添加標志。根據(jù) SMTP 協(xié)議的規(guī)定,郵件的頭包括: From、 To(可重復(fù)多次 )、 Subject、 Date、 XMailer、 MIMEVersion: 、 Contenttype 等多 個域。分別代表:普通接收者,抄送和密送。 成員函數(shù)說明: 1) public int AddAttachMent(CString filename):該方法的作用是添加根據(jù)參數(shù)提供的文件名稱,把該文件當成附件添加到當前的郵件中。對于每個域均有一對對應(yīng)的存取方法 Get 和 Set 來對其進行操作。 二、 CMailMessage 子模塊:該模塊用于表示郵件的所有內(nèi)容,如:郵件的發(fā)送者、接收者、標題、正文以及附件。在 SMTP協(xié)議中規(guī)定 :郵件正文以 DATA命令開始,以“ ”標志結(jié)束,為了避免在郵件正文中,出現(xiàn)上述的結(jié)束標志,必須在發(fā)送郵件前檢測郵件,把郵件中所有的與郵件結(jié)束符號相 同的字 符替換為“ CRLF..CRLF”,來避免在郵件發(fā)送時出現(xiàn)結(jié)束位置 不明 的錯誤。通過該方法,可以根據(jù)SetServerProperties 方法設(shè)置的屬性,連接到指定的服務(wù)器 。如果判斷正確,那么返回 TRUE;否則返回 FALSE。 3) private CString m_nSMTPServerHostName
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1