基于ESMTP的水文數(shù)據(jù)共享方法設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
基于ESMTP的水文數(shù)據(jù)共享方法設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
基于ESMTP的水文數(shù)據(jù)共享方法設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
基于ESMTP的水文數(shù)據(jù)共享方法設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
基于ESMTP的水文數(shù)據(jù)共享方法設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

1、基于ESMTP的水文數(shù)據(jù)共享方法設(shè)計(jì)與實(shí)現(xiàn)         關(guān)鍵詞 水文數(shù)據(jù)共享,ESMTP,POP3 0  引言    當(dāng)前,水利信息化正在水利行業(yè)大力推行,其中水文數(shù)據(jù)的共享是水資源管理以及防洪抗災(zāi)等決策支持的核心。由于水利部門管轄流域分布廣,各水文管理單位地域分散,管理機(jī)制多是采用集中-分散方式。管理站采集數(shù)據(jù)后傳送給各個(gè)分中心,再由分中心將信息匯總后發(fā)送給管理局(或水利廳),使得管理局(或水利廳)能對(duì)管轄范圍的水情信息進(jìn)行整體把握,做出決策分析;此外,因?yàn)楹恿髦g的聯(lián)

2、動(dòng)關(guān)系,各分中心、管理站之間也需要相互通信,因此水文信息的互傳及共享十分必要。    目前水文信息的互傳及共享采用的方式主要有以下三種:1,電話(傳真);2,公用通信信道;3,VPN(或網(wǎng)站)進(jìn)行數(shù)據(jù)共享。但這三種方式有其明顯的不足之處:電話(傳真)方式需要人工參與,限制了工作人員的工作范圍和處理事情的靈活性,而且需要接收方人工錄入數(shù)據(jù),這樣效率很低且缺乏實(shí)時(shí)性。公用通信信道方式通常利用PSTN、GSM、GPRS等進(jìn)行數(shù)據(jù)傳輸,這種方法傳送的數(shù)據(jù)量受限且運(yùn)行費(fèi)用較高。通過(guò)VPN(或網(wǎng)站)進(jìn)行數(shù)據(jù)共享,這種方式相對(duì)于前兩種而言,真正實(shí)現(xiàn)了信息化,但建立VPN或網(wǎng)站都

3、需要較高的投資和后期高昂的維護(hù)費(fèi)用,這阻礙了它的廣泛應(yīng)用及推廣。    為了彌補(bǔ)上述方法的不足,本文提出了基于email方式的水文數(shù)據(jù)共享的方法,通過(guò)郵件的收發(fā),網(wǎng)絡(luò)協(xié)議身份驗(yàn)證來(lái)實(shí)現(xiàn)信息的互傳,實(shí)現(xiàn)無(wú)人工參與的數(shù)據(jù)共享。該方法簡(jiǎn)單、高效,只要能上網(wǎng),不需要額外的系統(tǒng)維護(hù)成本,對(duì)于大多經(jīng)濟(jì)還不發(fā)達(dá)的水利單位具有實(shí)用性。1  郵件收發(fā)協(xié)議簡(jiǎn)介1.1  POP3協(xié)議    POP適用于C/S結(jié)構(gòu)的脫機(jī)模型的電子郵件協(xié)議,目前已發(fā)展到第三版,稱POP3。在POP3協(xié)議中有三種狀態(tài):認(rèn)可狀態(tài),處理狀態(tài),和更新?tīng)顟B(tài)。當(dāng)客戶機(jī)

4、與服務(wù)器建立聯(lián)系時(shí),一旦客戶機(jī)提供了自己身份并成功確認(rèn),即由認(rèn)可狀態(tài)轉(zhuǎn)入處理狀態(tài),在完成相應(yīng)的操作后客戶機(jī)發(fā)出QUIT命令,則進(jìn)入更新?tīng)顟B(tài),更新之后重返認(rèn)可狀態(tài)。    一般情況下,大多數(shù)現(xiàn)有的POP3客戶與服務(wù)器執(zhí)行采用ASCII明文發(fā)送用戶名和口令,在認(rèn)可狀態(tài)等待客戶連接的情況下,客戶發(fā)出連接,并由命令USER/PASS對(duì)在網(wǎng)絡(luò)上發(fā)送明文用戶名和口令給服務(wù)器進(jìn)行身份確認(rèn)。一旦確認(rèn)成功,便轉(zhuǎn)入處理狀態(tài)。1.2  ESMTP協(xié)議    ESMTP英文全稱是“Extended SMTP”,是對(duì)SMTP協(xié)議的擴(kuò)展,為了防止垃圾郵

5、件的泛濫,采用了身份驗(yàn)證機(jī)制。在登陸服務(wù)器后需經(jīng)過(guò)身份驗(yàn)證才能發(fā)信。其他部分同SMTP協(xié)議基本一樣。命令A(yù)UTH LOGIN表示開(kāi)始身份驗(yàn)證,然后是用戶名和密碼的驗(yàn)證。用戶名和密碼都是使用Base64編碼。    SMTP稱為簡(jiǎn)單郵件傳輸協(xié)議(Simple Mail Transfer Protocol),目標(biāo)是向用戶提供高效、可靠的郵件傳輸。SMTP的一個(gè)重要特點(diǎn)是它能夠在傳送中接力傳送郵件,即郵件可以通過(guò)不同網(wǎng)絡(luò)上的主機(jī)接力式傳送。工作在兩種情況下:一是電子郵件從客戶機(jī)傳輸?shù)椒?wù)器;二是從某一個(gè)服務(wù)器傳輸?shù)搅硪粋€(gè)服務(wù)器。SMTP是個(gè)請(qǐng)求/響應(yīng)協(xié)議,它監(jiān)聽(tīng)25號(hào)端

6、口,用于接收用戶的Mail請(qǐng)求,并與遠(yuǎn)端Mail服務(wù)器建立SMTP連接。客戶端向服務(wù)器發(fā)送請(qǐng)求命令,服務(wù)器向客戶端返回一些響應(yīng)信息。命令和響應(yīng)都是基于ASCII文本,并以CR和LF符結(jié)束。響應(yīng)包括一個(gè)表示返回狀態(tài)的三位數(shù)字代碼。    由于歷史原因,Email只被允許傳送ASCII字符,即一個(gè)8位字節(jié)的低7位。因此,如果您發(fā)送了一封帶有非ASCII字符(即字節(jié)的最高位是1)的Email通過(guò)有“歷史問(wèn)題”的網(wǎng)關(guān)時(shí)就可能會(huì)出現(xiàn)問(wèn)題。網(wǎng)關(guān)可能會(huì)把最高位置為0而產(chǎn)生錯(cuò)誤?;谝陨系囊恍┲饕虍a(chǎn)生了Base64編碼。    Base64編碼的

7、思想是采用64個(gè)基本的ASCII碼字符對(duì)數(shù)據(jù)進(jìn)行重新編碼。它將需要編碼的數(shù)據(jù)拆分成字節(jié)數(shù)組。以3個(gè)字節(jié)為一組。按順序排列24位數(shù)據(jù),再把這24位數(shù)據(jù)分成4組,即每組6位。再在每組的最高位前補(bǔ)兩個(gè)0湊足一個(gè)字節(jié)。這樣就把一個(gè)3字節(jié)為一組的數(shù)據(jù)重新編碼成了4個(gè)字節(jié)。當(dāng)所要編碼的數(shù)據(jù)的字節(jié)數(shù)不是3的整倍數(shù),也就是說(shuō)在分組時(shí)最后一組不夠3個(gè)字節(jié)。這時(shí)在最后一組填充1到2個(gè)0字節(jié)。并在最后編碼完成后在結(jié)尾添加1到2個(gè)“=”。2 水文信息共享系統(tǒng)實(shí)現(xiàn)    該系統(tǒng)通過(guò)網(wǎng)絡(luò)郵件收發(fā)協(xié)議進(jìn)行水文信息的傳送。從信息保密的角度出發(fā),發(fā)送協(xié)議我們采用具有身份驗(yàn)證機(jī)制的ESMTP協(xié)議;從

8、信息可讀性角度出發(fā),即信息編碼方式的限制,我們通過(guò)Base64編碼進(jìn)行解決;接收采用通用的POP3協(xié)議完成。2.1 數(shù)據(jù)交換流程    當(dāng)分中心需要將信息上報(bào)給管理處時(shí),需要先設(shè)置郵件發(fā)送端口號(hào)以及郵件服務(wù)器,接著驗(yàn)證用戶身份,然后是發(fā)送信息的添加和發(fā)送;接收方利用POP3協(xié)議到郵件服務(wù)器上進(jìn)行下載,其中關(guān)鍵是附件的處理,當(dāng)信息從郵件服務(wù)器中下載到接收方,則完成了一次信息交換。圖1 數(shù)據(jù)交換示意圖    從上圖中可以把整個(gè)數(shù)據(jù)交換流程劃分為三個(gè)部分:郵件發(fā)送,郵件接收和郵件處理。    1)郵件發(fā)送:把郵

9、件從本地發(fā)送到郵件服務(wù)器。    首先,設(shè)置郵件發(fā)送的端口號(hào)和郵件服務(wù)器;進(jìn)行服務(wù)器連接;    其次,將用戶名和密碼經(jīng)過(guò)Base64編碼,并且發(fā)送進(jìn)行驗(yàn)證;    最后,郵件發(fā)送。    2)郵件接收:把郵件從服務(wù)器下載到本地并處理附件。    主要應(yīng)用POP3協(xié)議將郵件從服務(wù)器進(jìn)行郵件下載。其主要流程如圖3所示:圖2 發(fā)郵件流程圖    首先,設(shè)置郵件接收端口號(hào)和下載郵件服務(wù)器;然后進(jìn)行服務(wù)器連接; &

10、#160;  其次,用戶名和密碼檢驗(yàn);    最后,郵件接收和附件處理。圖3 收郵件流程圖    3)郵件處理:構(gòu)建和分析郵件的各個(gè)部件(郵件頭,郵件體,附件等)。該部分為整個(gè)系統(tǒng)實(shí)現(xiàn)的重點(diǎn)也是關(guān)鍵。它主要完成郵件體的生成、附件添加、以及接收郵件后郵件的解析和附件的處理等。    郵件的生成主要通過(guò)CMimeMessage、CMimeBody、CMimeHeader類。首先創(chuàng)建CMimeField類創(chuàng)建郵件項(xiàng)列表,然后CMimeHeader進(jìn)行郵件的頭部的生成,并存放到郵件項(xiàng)列表中;郵件體通過(guò)C

11、MimeBody進(jìn)行創(chuàng)建,加載附件,最后再調(diào)用CMimeMessage類構(gòu)成郵件;實(shí)現(xiàn)代碼如下:CMimeMessage mail;/設(shè)置郵件各項(xiàng)的值mail.SetFrom(MailAddress);mail.SetTo(DestinationAddress);mail.SetSubject("郵件主題");mail.SetDate();mail.SetVersion();mail.SetContentType("multipart/mixed");mail.SetBoundary();/創(chuàng)建郵件體CMimeBody* pBp;pBp = mail.C

12、reatePart();pBp->SetText("數(shù)據(jù)見(jiàn)附件");pBp = mail.CreatePart();/添加附件pBp->SetDescription("attachment"); pBp->SetTransferEncoding("base64");pBp->ReadFromFile("附件");圖4 郵件收發(fā)類圖    郵件解析主要實(shí)現(xiàn)郵件附件的處理,它通過(guò)定義中間文檔將附件拷貝到內(nèi)存當(dāng)中,然后再?gòu)膬?nèi)存中將數(shù)據(jù)讀出,然后以與郵件名同名的文件將附

13、件存放到用戶設(shè)定的目錄下;實(shí)現(xiàn)代碼如下:CStdioFile File;File.Open("a.txt",CFile:modeCreate|CFile:modeWrite); LONG size = 0,nsize =0;/接受郵件到文件while(size <= lSize ) /接受郵件nsize=m_wsSocket.Receive(buf,10240); size =size + nsize;File.Write(buf,nsize);File.Flush();File.Close();/打開(kāi)接收到的文件File.Open("a.txt"

14、,CFile:modeRead); /得到文件的大小LONG FileSize=File.GetLength();/建立緩沖區(qū)來(lái)存放讀取文件的內(nèi)容char* pBuff = new charFileSize;File.Read(pBuff,size); /讀取文件到緩沖區(qū)File.Close(); /關(guān)閉文件File.Remove("a.txt"); CMimeMessage mail; mail.Load(pBuff,size); CMimeBody:CBodyList bodies; / 定義變量Int nCount=mail.GetBodyPartList(

15、bodies); CMimeBody:CBodyList:const_iterator it; /獲得附件for (it=bodies.begin(); it!=bodies.end(); it+)CMimeBody* pBP = *it;if (pBP->IsAttachment()/獲得附件名string strName = pBP->GetName();/存儲(chǔ)附件到當(dāng)前目錄pBP->WriteToFile(FilePath+strName.c_str();delete pBuff; /刪除緩沖區(qū)3  數(shù)據(jù)交換類圖及其實(shí)現(xiàn)    該

16、系統(tǒng)采用Visual C+6.0進(jìn)行開(kāi)發(fā),將數(shù)據(jù)交換流程中三個(gè)主要部分封裝為標(biāo)準(zhǔn)動(dòng)態(tài)鏈接庫(kù)。該模塊具有通用性,可應(yīng)用于需要進(jìn)行數(shù)據(jù)交換和共享的系統(tǒng)。從圖4中可以看出通過(guò)CMimeHeader,CMimeBody和CMimeMessage主要用于郵件體的生成和解析;CSmtp類用于郵件發(fā)送;CPop3用于郵件接收。4  結(jié)語(yǔ)    基于Email方式的水文數(shù)據(jù)共享系統(tǒng)的設(shè)計(jì)和開(kāi)發(fā)為目前水文數(shù)據(jù)的互傳和共享提供了一種新的方式,該方法高效、簡(jiǎn)單易行,只要開(kāi)通了Internet網(wǎng)絡(luò)即可應(yīng)用,無(wú)運(yùn)行維護(hù)費(fèi)用。目前該系統(tǒng)在都江堰灌區(qū)東風(fēng)渠管理處應(yīng)用良好。參考文獻(xiàn)1 潘愛(ài)民譯. Visual C+技術(shù)內(nèi)幕(第4版)M. 北京:清華大學(xué)出版社,20042 汪曉平,鐘軍. Visual C+網(wǎng)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論