版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 基于ESMTP的水文數(shù)據(jù)共享方法設(shè)計與實現(xiàn)</p><p> 摘 要 針對水利部門數(shù)據(jù)共享的高成本、低效率現(xiàn)狀,提出一種通過email方式進行水文數(shù)據(jù)共享的方法。通過對ESMTP和POP3協(xié)議的應(yīng)用,發(fā)送方將數(shù)據(jù)打包作為郵件的附件發(fā)送,接收方解析郵件,從而實現(xiàn)數(shù)據(jù)共享。該方法靈活方便,運行成本低。本文對協(xié)議進行了簡單說明,同時對數(shù)據(jù)交換流程和實現(xiàn)類圖進行了詳細說明。 </p>
2、<p> 關(guān)鍵詞 水文數(shù)據(jù)共享,ESMTP,POP3</p><p><b> 0 引言</b></p><p> 當前,水利信息化正在水利行業(yè)大力推行,其中水文數(shù)據(jù)的共享是水資源管理以及防洪抗災(zāi)等決策支持的核心。由于水利部門管轄流域分布廣,各水文管理單位地域分散,管理機制多是采用集中-分散方式。管理站采集數(shù)據(jù)后傳送給各個分中心,再由分中心將信息
3、匯總后發(fā)送給管理局(或水利廳),使得管理局(或水利廳)能對管轄范圍的水情信息進行整體把握,做出決策分析;此外,因為河流之間的聯(lián)動關(guān)系,各分中心、管理站之間也需要相互通信,因此水文信息的互傳及共享十分必要。</p><p> 目前水文信息的互傳及共享采用的方式主要有以下三種:1,電話(傳真);2,公用通信信道;3,VPN(或網(wǎng)站)進行數(shù)據(jù)共享。但這三種方式有其明顯的不足之處:電話(傳真)方式需要人工參與,限制了工
4、作人員的工作范圍和處理事情的靈活性,而且需要接收方人工錄入數(shù)據(jù),這樣效率很低且缺乏實時性。公用通信信道方式通常利用PSTN、GSM、GPRS等進行數(shù)據(jù)傳輸,這種方法傳送的數(shù)據(jù)量受限且運行費用較高。通過VPN(或網(wǎng)站)進行數(shù)據(jù)共享,這種方式相對于前兩種而言,真正實現(xiàn)了信息化,但建立VPN或網(wǎng)站都需要較高的投資和后期高昂的維護費用,這阻礙了它的廣泛應(yīng)用及推廣。</p><p> 為了彌補上述方法的不足,本文提出了基
5、于email方式的水文數(shù)據(jù)共享的方法,通過郵件的收發(fā),網(wǎng)絡(luò)協(xié)議身份驗證來實現(xiàn)信息的互傳,實現(xiàn)無人工參與的數(shù)據(jù)共享。該方法簡單、高效,只要能上網(wǎng),不需要額外的系統(tǒng)維護成本,對于大多經(jīng)濟還不發(fā)達的水利單位具有實用性。</p><p> 1 郵件收發(fā)協(xié)議簡介</p><p> 1.1 POP3協(xié)議</p><p> POP適用于C/S結(jié)構(gòu)的脫機模型的電子郵件協(xié)議
6、,目前已發(fā)展到第三版,稱POP3。</p><p> 在POP3協(xié)議中有三種狀態(tài):認可狀態(tài),處理狀態(tài),和更新狀態(tài)。當客戶機與服務(wù)器建立聯(lián)系時,一旦客戶機提供了自己身份并成功確認,即由認可狀態(tài)轉(zhuǎn)入處理狀態(tài),在完成相應(yīng)的操作后客戶機發(fā)出QUIT命令,則進入更新狀態(tài),更新之后重返認可狀態(tài)。</p><p> 一般情況下,大多數(shù)現(xiàn)有的POP3客戶與服務(wù)器執(zhí)行采用ASCII明文發(fā)送用戶名和口令,
7、在認可狀態(tài)等待客戶連接的情況下,客戶發(fā)出連接,并由命令USER/PASS對在網(wǎng)絡(luò)上發(fā)送明文用戶名和口令給服務(wù)器進行身份確認。一旦確認成功,便轉(zhuǎn)入處理狀態(tài)。</p><p> 1.2 ESMTP協(xié)議</p><p> ESMTP英文全稱是“Extended SMTP”,是對SMTP協(xié)議的擴展,為了防止垃圾郵件的泛濫,采用了身份驗證機制。在登陸服務(wù)器后需經(jīng)過身份驗證才能發(fā)信。其他部分同S
8、MTP協(xié)議基本一樣。命令A(yù)UTH LOGIN表示開始身份驗證,然后是用戶名和密碼的驗證。用戶名和密碼都是使用Base64編碼。</p><p> 1.2.1 SMTP協(xié)議:</p><p> SMTP稱為簡單郵件傳輸協(xié)議(Simple Mail Transfer Protocol),目標是向用戶提供高效、可靠的郵件傳輸。SMTP的一個重要特點是它能夠在傳送中接力傳送郵件,即郵件可以通
9、過不同網(wǎng)絡(luò)上的主機接力式傳送。工作在兩種情況下:一是電子郵件從客戶機傳輸?shù)椒?wù)器;二是從某一個服務(wù)器傳輸?shù)搅硪粋€服務(wù)器。SMTP是個請求/響應(yīng)協(xié)議,它監(jiān)聽25號端口,用于接收用戶的Mail請求,并與遠端Mail服務(wù)器建立SMTP連接??蛻舳讼蚍?wù)器發(fā)送請求命令,服務(wù)器向客戶端返回一些響應(yīng)信息。命令和響應(yīng)都是基于ASCII文本,并以CR和LF符結(jié)束。響應(yīng)包括一個表示返回狀態(tài)的三位數(shù)字代碼。</p><p> 1.
10、2.2 Base64編碼:</p><p> 由于歷史原因,Email只被允許傳送ASCII字符,即一個8位字節(jié)的低7位。因此,如果您發(fā)送了一封帶有非ASCII字符(即字節(jié)的最高位是1)的Email通過有“歷史問題”的網(wǎng)關(guān)時就可能會出現(xiàn)問題。網(wǎng)關(guān)可能會把最高位置為0而產(chǎn)生錯誤?;谝陨系囊恍┲饕虍a(chǎn)生了Base64編碼。</p><p> Base64編碼的思想是采用64個基本的A
11、SCII碼字符對數(shù)據(jù)進行重新編碼。它將需要編碼的數(shù)據(jù)拆分成字節(jié)數(shù)組。以3個字節(jié)為一組。按順序排列24位數(shù)據(jù),再把這24位數(shù)據(jù)分成4組,即每組6位。再在每組的最高位前補兩個0湊足一個字節(jié)。這樣就把一個3字節(jié)為一組的數(shù)據(jù)重新編碼成了4個字節(jié)。當所要編碼的數(shù)據(jù)的字節(jié)數(shù)不是3的整倍數(shù),也就是說在分組時最后一組不夠3個字節(jié)。這時在最后一組填充1到2個0字節(jié)。并在最后編碼完成后在結(jié)尾添加1到2個“=”。</p><p>
12、2 水文信息共享系統(tǒng)實現(xiàn)</p><p> 該系統(tǒng)通過網(wǎng)絡(luò)郵件收發(fā)協(xié)議進行水文信息的傳送。從信息保密的角度出發(fā),發(fā)送協(xié)議我們采用具有身份驗證機制的ESMTP協(xié)議;從信息可讀性角度出發(fā),即信息編碼方式的限制,我們通過Base64編碼進行解決;接收采用通用的POP3協(xié)議完成。</p><p> 2.1 數(shù)據(jù)交換流程</p><p> 當分中心需要將信息上報給管理處
13、時,需要先設(shè)置郵件發(fā)送端口號以及郵件服務(wù)器,接著驗證用戶身份,然后是發(fā)送信息的添加和發(fā)送;接收方利用POP3協(xié)議到郵件服務(wù)器上進行下載,其中關(guān)鍵是附件的處理,當信息從郵件服務(wù)器中下載到接收方,則完成了一次信息交換。</p><p> 圖1 數(shù)據(jù)交換示意圖</p><p> 從上圖中可以把整個數(shù)據(jù)交換流程劃分為三個部分:郵件發(fā)送,郵件接收和郵件處理。</p><p&g
14、t; 1)郵件發(fā)送:把郵件從本地發(fā)送到郵件服務(wù)器。</p><p> 首先,設(shè)置郵件發(fā)送的端口號和郵件服務(wù)器;進行服務(wù)器連接;</p><p> 其次,將用戶名和密碼經(jīng)過Base64編碼,并且發(fā)送進行驗證;</p><p><b> 最后,郵件發(fā)送。</b></p><p> 2)郵件接收:把郵件從服務(wù)器下載到
15、本地并處理附件。</p><p> 主要應(yīng)用POP3協(xié)議將郵件從服務(wù)器進行郵件下載。其主要流程如圖3所示:</p><p><b> 圖2 發(fā)郵件流程圖</b></p><p> 首先,設(shè)置郵件接收端口號和下載郵件服務(wù)器;然后進行服務(wù)器連接;</p><p> 其次,用戶名和密碼檢驗;</p>&l
16、t;p> 最后,郵件接收和附件處理。</p><p><b> 圖3 收郵件流程圖</b></p><p> 3)郵件處理:構(gòu)建和分析郵件的各個部件(郵件頭,郵件體,附件等)。</p><p> 該部分為整個系統(tǒng)實現(xiàn)的重點也是關(guān)鍵。它主要完成郵件體的生成、附件添加、以及接收郵件后郵件的解析和附件的處理等。</p>&
17、lt;p> 郵件的生成主要通過CMimeMessage、CMimeBody、CMimeHeader類。首先創(chuàng)建CMimeField類創(chuàng)建郵件項列表,然后CMimeHeader進行郵件的頭部的生成,并存放到郵件項列表中;郵件體通過CMimeBody進行創(chuàng)建,加載附件,最后再調(diào)用CMimeMessage類構(gòu)成郵件;實現(xiàn)代碼如下:</p><p> CMimeMessage mail;</p>
18、<p> //設(shè)置郵件各項的值</p><p> mail.SetFrom(MailAddress);</p><p> mail.SetTo(DestinationAddress);</p><p> mail.SetSubject("郵件主題");</p><p> mail.SetDate();&
19、lt;/p><p> mail.SetVersion();</p><p> mail.SetContentType("multipart/mixed");</p><p> mail.SetBoundary();</p><p><b> //創(chuàng)建郵件體</b></p><p
20、> CMimeBody* pBp;</p><p> pBp = mail.CreatePart();</p><p> pBp->SetText("數(shù)據(jù)見附件");</p><p> pBp = mail.CreatePart();</p><p><b> //添加附件</
21、b></p><p> pBp->SetDescription("attachment"); </p><p> pBp->SetTransferEncoding("base64");</p><p> pBp->ReadFromFile("附件");&
22、lt;/p><p><b> 圖4 郵件收發(fā)類圖</b></p><p> 郵件解析主要實現(xiàn)郵件附件的處理,它通過定義中間文檔將附件拷貝到內(nèi)存當中,然后再從內(nèi)存中將數(shù)據(jù)讀出,然后以與郵件名同名的文件將附件存放到用戶設(shè)定的目錄下;實現(xiàn)代碼如下:</p><p> CStdioFile File;</p><p> Fi
23、le.Open("a.txt",CFile::modeCreate|CFile::modeWrite); </p><p> LONG size = 0,nsize =0;</p><p><b> //接受郵件到文件</b></p><p> while(size <= lSize ) </p&g
24、t;<p><b> {</b></p><p><b> //接受郵件</b></p><p> nsize=m_wsSocket.Receive(buf,10240); </p><p> size =size + nsize;</p><p> File.Write(b
25、uf,nsize);</p><p><b> }</b></p><p> File.Flush();</p><p> File.Close();</p><p> //打開接收到的文件</p><p> File.Open("a.txt",CFile::mode
26、Read); </p><p><b> //得到文件的大小</b></p><p> LONG FileSize=File.GetLength();</p><p> //建立緩沖區(qū)來存放讀取文件的內(nèi)容</p><p> char* pBuff = new char[FileSize];</p>
27、<p> File.Read(pBuff,size); //讀取文件到緩沖區(qū)</p><p> File.Close(); //關(guān)閉文件</p><p> File.Remove("a.txt");</p><p> CMimeMessage mail; </p><p> mail.Load(pBuf
28、f,size); </p><p> CMimeBody::CBodyList bodies; // 定義變量</p><p> Int nCount=mail.GetBodyPartList(bodies); </p><p> CMimeBody::CBodyList::const_iterator it; </p><p><
29、;b> //獲得附件</b></p><p> for (it=bodies.begin(); it!=bodies.end(); it++)</p><p><b> {</b></p><p> CMimeBody* pBP = *it;</p><p> if (pBP->
30、IsAttachment())</p><p><b> {</b></p><p><b> //獲得附件名</b></p><p> string strName = pBP->GetName();</p><p> //存儲附件到當前目錄</p><p
31、> pBP->WriteToFile(FilePath+strName.c_str());</p><p><b> }</b></p><p><b> }</b></p><p> delete pBuff; //刪除緩沖區(qū)</p><p> 3 數(shù)據(jù)交換類圖及其
32、實現(xiàn)</p><p> 該系統(tǒng)采用Visual C++6.0進行開發(fā),將數(shù)據(jù)交換流程中三個主要部分封裝為標準動態(tài)鏈接庫。該模塊具有通用性,可應(yīng)用于需要進行數(shù)據(jù)交換和共享的系統(tǒng)。</p><p> 從圖4中可以看出通過CMimeHeader,CMimeBody和CMimeMessage主要用于郵件體的生成和解析;CSmtp類用于郵件發(fā)送;CPop3用于郵件接收。</p>&
33、lt;p><b> 4 結(jié)語</b></p><p> 基于Email方式的水文數(shù)據(jù)共享系統(tǒng)的設(shè)計和開發(fā)為目前水文數(shù)據(jù)的互傳和共享提供了一種新的方式,該方法高效、簡單易行,只要開通了Internet網(wǎng)絡(luò)即可應(yīng)用,無運行維護費用。目前該系統(tǒng)在都江堰灌區(qū)東風(fēng)渠管理處應(yīng)用良好。</p><p><b> 參考文獻</b></p>
34、;<p> [1] 潘愛民譯. Visual C++技術(shù)內(nèi)幕(第4版)[M]. 北京:清華大學(xué)出版社,2004</p><p> [2] 汪曉平,鐘軍. Visual C++網(wǎng)絡(luò)通信協(xié)議分析與應(yīng)用實現(xiàn)[M]. 北京:人民郵電出版社,2003</p><p> [3] 張建云,姚永熙,唐鎮(zhèn)松. 我國水文自動測報系統(tǒng)的發(fā)展與探討[J]. 水文,2006,26(3):53-5
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水文數(shù)據(jù)共享平臺移動端的設(shè)計與實現(xiàn).pdf
- 基于java的數(shù)據(jù)共享平臺的設(shè)計與實現(xiàn)【開題報告】
- 基于元數(shù)據(jù)的氣象科學(xué)數(shù)據(jù)共享系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 35883.基于元數(shù)據(jù)的氣象科學(xué)數(shù)據(jù)共享平臺的設(shè)計與實現(xiàn)
- 數(shù)據(jù)交換與共享系統(tǒng)的設(shè)計與實現(xiàn)數(shù)據(jù)交換與共享系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 共享數(shù)據(jù)庫的設(shè)計與實現(xiàn).pdf
- 基于Hadoop的煤炭企業(yè)數(shù)據(jù)共享平臺設(shè)計與實現(xiàn).pdf
- 基于ODS的綜合數(shù)據(jù)共享體系的設(shè)計與實現(xiàn).pdf
- 基于XML的高校共享數(shù)據(jù)中心的設(shè)計與實現(xiàn).pdf
- 工商系統(tǒng)數(shù)據(jù)共享的設(shè)計與實現(xiàn).pdf
- 基于XML的異構(gòu)數(shù)據(jù)庫共享的設(shè)計與實現(xiàn).pdf
- 數(shù)據(jù)共享與數(shù)據(jù)交換系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 基于數(shù)據(jù)共享平臺的經(jīng)濟預(yù)測分析系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 基于光纖通道的文件級數(shù)據(jù)共享系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 基于共享數(shù)據(jù)庫科研管理系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 基于XML的異質(zhì)數(shù)據(jù)庫數(shù)據(jù)共享與實現(xiàn).pdf
- 基于OPeNDAP協(xié)議的海洋數(shù)據(jù)文件共享平臺設(shè)計與實現(xiàn).pdf
- 43717.基于元數(shù)據(jù)的氣象信息共享平臺的設(shè)計與實現(xiàn)
- 基于Web Service的客運數(shù)據(jù)共享平臺的設(shè)計與實現(xiàn).pdf
- 11547.基于web的海洋科研數(shù)據(jù)共享系統(tǒng)的設(shè)計與實現(xiàn)
評論
0/150
提交評論