SMTP服務(wù)器編寫實(shí)驗(yàn)報(bào)告_第1頁
SMTP服務(wù)器編寫實(shí)驗(yàn)報(bào)告_第2頁
SMTP服務(wù)器編寫實(shí)驗(yàn)報(bào)告_第3頁
SMTP服務(wù)器編寫實(shí)驗(yàn)報(bào)告_第4頁
SMTP服務(wù)器編寫實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、SMTP服務(wù)器編寫實(shí)驗(yàn)報(bào)告一.實(shí)驗(yàn)?zāi)康?1)編寫一個(gè)SMTP電子郵件服務(wù)器,觀察電子郵件應(yīng)用程序與SMTP郵件服務(wù)器 的命令交互過程簡化的SMTP服務(wù)器(a)(b)(c)(d)響應(yīng)客戶SMTP命令,將命令的交互過程和收到的郵件顯示到屏幕上 可以僅支持單用戶可以不保存和轉(zhuǎn)發(fā)收到的郵件可以不作錯(cuò)誤處理(3) 要求能顯示客戶端發(fā)送的圖片(4) 提交實(shí)驗(yàn)報(bào)告和源碼(要求提交整個(gè)工程文件)二.實(shí)驗(yàn)思路1) 創(chuàng)建基于對話框類的程序SMT PMailServer2) 添加對話框類SMTPServerDIg,在類中獲取主機(jī)地址作為服務(wù)器地址,創(chuàng)建套 接字,綁定端口號(hào)為253) 編寫base64.h的頭文件,用

2、于圖片解碼4) 添加基于 CAsyncSocke的類 ServerSocket,重載 OnAccept函數(shù),與 ClientSocket 建立連接5) 添加基于CAsyncSocke 1的類ClientrSocket,重載On Receive函數(shù),根據(jù)命令進(jìn) 行郵件傳送和退出三.實(shí)驗(yàn)過程常用的SMTP命令命令鎬述HELO <主機(jī)城名A幵始會(huì)話MAIL FROM; V發(fā)送者電子郵件地址>開始一個(gè)日遞處理,指出郵舛發(fā)送旨RCPT TO: <姿收者電子郵件地址>fS出郵件按枚者DATA接收g序?qū)ATA命令后面的數(shù)躬作為郵件內(nèi)容處理,直到<CR><LF>

3、;,<CR> <LF>y現(xiàn)RSET口止豈笛的郵件處理NOO P無操作QUIT結(jié)束會(huì)話常用的SMTP響應(yīng)描述220域服務(wù)準(zhǔn)備妊221系統(tǒng)狀態(tài)或系統(tǒng)幫北應(yīng)答250請求的命令成功完成354可以發(fā)送郵件內(nèi)容SOU語怯錯(cuò)誤,命令不館識(shí)別502命令未實(shí)現(xiàn)550郵箱不可用1.獲取SMTP服務(wù)器地址m_IPeSHTP ai 1 Server DI g;: CEJflTPMei 1 Sei"/erOU (CWnd* pParen: A=MJLL*/) :CE i alogx Csv. TPJl ai i S er ver D1 g: ILD, pParent)dip cmip.

4、hicon 二 AfxGe-tApp()->Loa<iIconClER_JlAIMFRAHE), char HostNaire 20;gthoslnane (HoEtName, sizeof (HostNaine)./獲取主機(jī)的IPhostenl* Sn,hn 二 gethstbyrameCHostName),CStrins atrlPAddr;str TP Addr= i ne t _nt o a (* C £t rue t irvaG'dr hn->h_acldr_l i st 01 k m_IP=ElrI?Addr,2. 在對話框類中創(chuàng)建Socket陽

5、刨建朋務(wù)器套接卒,建矢敗緒岀錯(cuò)誤信息irCLwsack. Crdste茨,SOCK_STRn<|FD_服血 |肛 JOEWDlAOCEPT |FD_OMHECT |FD_C1jOS?. <i_rPJD lleS£afeEoE(_T C*'Sotket 刨建頭:敗"),c?ltC0If (LnyEock. LlEtciiC)Ltvt nlrrorCoOe = nysDck. Gel Last Error (); f (nixrnif ode ' =WSAEWCi1H.DBLOCK)Rv聞vMH-T"曲斤先敗); 町5口比 Closed ;

6、esif'D);"無錯(cuò)誤丿話.靜出服宇器IF確啟動(dòng)信愿kfE&etJlairffndO->SeiClElteirTe' 口山丄詵:("莎 TP.孌轡 1§;肯鈴好 rjf).按送 3 志L-cturr. TKUE;"關(guān)非斕除點(diǎn)謨置刮桂也 査則砥B TRUE3. 建立連接void ServerEoeket : lOnA-icepl (int iriErrorCode)CString prelogjAfxGetMainWndC) ->GetDIsIteiQTeKt (irC_L0G, prelog) log十=prelog

7、;Client Socket WervSocknew Client Socket;/ZTCF諄接CStriag sir C220 server, coo*'), char *豈二"220 server. coinr W: int IsCoimect二Accept OMJewEock) f if (IsCamect 1=0)WewSock->Send(Si 20);"調(diào)用接受函數(shù)進(jìn)行操作NeKrEock-MsyncSel ect (FD_READ), los+="TCPa 接成功 rn"巴1 sulog+=-TCPS 接失敗 W;prelog

8、. Format (l/S :粘g'rAn/; str);lcig4二prelog:AfxGetMainflndC) ->£etDIgI t einText (IICJJDGlt)Q * /寫服務(wù)器工作日志 CAsyncSocket:0nAccept CnErr口rCode);4. 郵件傳送在Clie ntSocket的On Receive函數(shù)中進(jìn)行郵件傳送CStr扌ng prelcig, log,const int sizrSOOiO',char datasize= 0;int 1 ength=Eeceivetdala, size, 0);/7接收到的信息保存

9、至ijdataAfzGct.HaliiWiiJC)->GctDlsI t-uTcztdEC.LOG, prclog) 取二寫的工作志1時(shí)二PTelcs,"更新丄作日,注CStrine iirCSIlIiib sCupyDataCdata).if CSOCKl_bf<XUR 1= iengtnjrcved = sCopyData;5. 根據(jù)客戶機(jī)的狀態(tài)status和接收到的信息rcved給出相應(yīng)的應(yīng)答:1)收到 HELO, Status置為 1if (statU3=O)(rcved. Left 二HELCQ) /剛建立連接,收至?xí)鏗ELO"prelog. Ferm

10、at (L"C;墓日:revei ;log=log+prelog;char +='*250 Hello client. coirT;Send(3, 50) IAsyncSelect (FTi_READ);str. Funuat(L'*25C IIcllu lullcnt. uuitO , prelog. Format(L"S :$mrn"j str);los=log+prelog;status = 1;狀態(tài).己經(jīng)收到過HELD信息Af:GetMainWnd(>->SetDlgIteirText(IDC_LjOGJog); /W工作日志

11、return,2)收到 MAIL FROM, statusS為 2 if(Eta-tLi3=l)(rcve±Left(4)="'HAlL'') t"收到5ML FROM"prelog.卩 rmat(L"C:%s'; rcved);108=1og+prelog;str. Format CL*25O sender ok"); char *£二"£50 sender ok"EendCsj 50);AsyneSelect CFD_KEAD): prelog. Format

12、 (L"S :粘s'r'n", str), log 二 log*prelog;status = 2;狀態(tài)*已經(jīng)收到過HAIL FIOTAfxGetMainWndO >SetDlgItemText (IDC_LOG, 1 og);發(fā)送日志return,/收到"RCPT TO"3)收到 RCPT TO, status為 3 if(tSus=2)(rcvecLLt(7)="RCPT TO") prelog. Format (L"C:%s'; rcved); log=log+E>relog; st

13、r. Format(L2EO Recipient ok"); char +日二"250 Recipient ok" Send(Si 50), AsyncSelect CFD_READ); pre log. Format (L"S 珂str) *los=log+prelog;status = 3,"狀態(tài):已經(jīng)收到過'甕PT T Af xGetMainWndC) )-SetDlgIt emTest ClDC_LOG, log) ; /發(fā)iS 日志 return,4)收到 DATA, statusS為 4收到,開始接受數(shù)據(jù)if (3tatus

14、3)M(rcved. Left C4)"DATA") prelog, Forroat(L'C:Us'*, roved), log=log+prelog;str. Format(L''354 Send mail, end withon a line");char +sm"354 Send mail,亡nd with " on a line* Send(sj 50),AsyncSelect(FD_KEAD); prelog. Format (LS:Hsrn*j str); log=log+prelog;status

15、= 4; "狀態(tài)i接收數(shù)據(jù) AfxGetilainSndO ->SetDlgItemText (IDC_L0Gj log) ; 發(fā)送日志 return;5)收到DATA命令后,status保持為4,接收數(shù)據(jù)CString msSj prerrisg,Afx(retMaind() ->GetDlsItemText (IDC-MSGprewsg)取已收到軟據(jù)Afy&etMainWndO ->GetrigItemText ClDC_LOG, prelog) ;已寫工祜日志insg+=premsa,premss. FOTHJat (L"C :粘屛 rcvi

16、ed);"收到新數(shù)扌居m呂計(jì)=preins&,fZg新數(shù)據(jù)Afjt&etMainWndO ->SetrigIterQText ClDC_MEG, rnsg),當(dāng)數(shù)據(jù)接收完全后(以“.”為結(jié)束標(biāo)志)a)更新工作日志和郵件數(shù)據(jù),status置為5if(rcved. Find(L"'rm Vn'O l=-l)"收到數(shù)據(jù)結(jié)束信息"* "str.format(L250 Message accepted for celivery);char *e='*250 Message accepted for deliv

17、ery*;Send Csj 50),prelog. FOYinat (L"S:館rr/: str); logloprelog;AfiexKainWnd()->SerDLsIteipText(IDC_LOt, log); zZ重寫工作B志 status = 5;"狀態(tài)退出AfxGetMainWnd() ->GetELglt emText (IDC_KSC, msg);/7重寫郵件數(shù)據(jù)b)附件中是否有圖片,若有圖片,完成解碼并顯示i-ilt SELst = H1E5. 3 Lncll(_TC'"U=int?nt-JLsp=iSLtLnn: att

18、achirent'') );/查找郵件是否有bcnp雪片If tsKL 3tl=-l)"尋找兩個(gè)rn軸位B來確定編碼的位直CSrri n? ime-nsE;Lilt Lin5_pD5=iD5. ?LndCTC"rnrii"), eii ct);Cjtrin呂 5t art=ijD5, Il i(im5_pD創(chuàng) 4ime,GutLcjigthO ljie_p3s=4);Lut 1出培Lb-mldrl.卩iJ(_T(氣叭img二ut srt. |_Bft (Length);得了固片的Xee MS瑪Dc?oic(L:ng, picture);"

19、解碼G511T7H丑 1.左EV町帕p 半CurrentApd= ('7EHT?!ailJerzsrAp:) *Mf黑41App();CFZirr円iHi 】S»rvp''PI e Currpntni E二(£町刑=ti I 春叩盯一| mCiirr»ntApp->Tit_plffli nWni;Curr ent DI e->5irp, SetBit:ncip (picture)/fSf i 到對話卞匡 fl 應(yīng)位直6. 當(dāng)接收命令的順序錯(cuò)誤,或有錯(cuò)誤命令時(shí),進(jìn)行錯(cuò)誤處理 pre 1 OS' Format (L/C:那合

20、:rcved),lo6=los+prelog,str. Format CL"*500 bad sequence of commands OR bad syntax"); charbad sequence of coirmarLds OR bad syntax"Send(3, 50);pre log. Format (L"百;粘s'r'n: str), log=la+prelos,AfjGetMainWndC)->SetDlsIi:eniText (IDC_LOG, log);發(fā)送日志 7.關(guān)閉連接收到QUIT命令,status置為6

21、,關(guān)閉Socket,退出if(CEtatusi=4)(rcved.Left二迫山廠)"收到QUIT(不屬于郵件內(nèi)容) prel os,F(xiàn)orntat (L"C ;掘s: rcved) log=log+prelog;str. Foririat CL"*221 Qui 匕 bye!");char +s二"221 Quit: bye!"SendCsj 50);prelog. Format (L'"E :>srn str);log=los+prelog,status二6;/狀態(tài):退出AfxGetMainWnd()->SetDIgItemText (IDC_LCXj, log) ; 發(fā)送日志Close C);/ftlSocketreturn,占 SMIP

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論