版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于ESMTP的水文數(shù)據(jù)共享方法設(shè)計(jì)與實(shí)現(xiàn)</p><p> 摘 要 針對(duì)水利部門數(shù)據(jù)共享的高成本、低效率現(xiàn)狀,提出一種通過(guò)email方式進(jìn)行水文數(shù)據(jù)共享的方法。通過(guò)對(duì)ESMTP和POP3協(xié)議的應(yīng)用,發(fā)送方將數(shù)據(jù)打包作為郵件的附件發(fā)送,接收方解析郵件,從而實(shí)現(xiàn)數(shù)據(jù)共享。該方法靈活方便,運(yùn)行成本低。本文對(duì)協(xié)議進(jìn)行了簡(jiǎn)單說(shuō)明,同時(shí)對(duì)數(shù)據(jù)交換流程和實(shí)現(xiàn)類圖進(jìn)行了詳細(xì)說(shuō)明。 </p>
2、<p> 關(guān)鍵詞 水文數(shù)據(jù)共享,ESMTP,POP3</p><p><b> 0 引言</b></p><p> 當(dāng)前,水利信息化正在水利行業(yè)大力推行,其中水文數(shù)據(jù)的共享是水資源管理以及防洪抗災(zāi)等決策支持的核心。由于水利部門管轄流域分布廣,各水文管理單位地域分散,管理機(jī)制多是采用集中-分散方式。管理站采集數(shù)據(jù)后傳送給各個(gè)分中心,再由分中心將信息
3、匯總后發(fā)送給管理局(或水利廳),使得管理局(或水利廳)能對(duì)管轄范圍的水情信息進(jìn)行整體把握,做出決策分析;此外,因?yàn)楹恿髦g的聯(lián)動(dòng)關(guān)系,各分中心、管理站之間也需要相互通信,因此水文信息的互傳及共享十分必要。</p><p> 目前水文信息的互傳及共享采用的方式主要有以下三種:1,電話(傳真);2,公用通信信道;3,VPN(或網(wǎng)站)進(jìn)行數(shù)據(jù)共享。但這三種方式有其明顯的不足之處:電話(傳真)方式需要人工參與,限制了工
4、作人員的工作范圍和處理事情的靈活性,而且需要接收方人工錄入數(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)站都需要較高的投資和后期高昂的維護(hù)費(fèi)用,這阻礙了它的廣泛應(yīng)用及推廣。</p><p> 為了彌補(bǔ)上述方法的不足,本文提出了基
5、于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í)用性。</p><p> 1 郵件收發(fā)協(xié)議簡(jiǎn)介</p><p> 1.1 POP3協(xié)議</p><p> POP適用于C/S結(jié)構(gòu)的脫機(jī)模型的電子郵件協(xié)議
6、,目前已發(fā)展到第三版,稱POP3。</p><p> 在POP3協(xié)議中有三種狀態(tài):認(rèn)可狀態(tài),處理狀態(tài),和更新?tīng)顟B(tài)。當(dāng)客戶機(jī)與服務(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)。</p><p> 一般情況下,大多數(shù)現(xiàn)有的POP3客戶與服務(wù)器執(zhí)行采用ASCII明文發(fā)送用戶名和口令,
7、在認(rèn)可狀態(tài)等待客戶連接的情況下,客戶發(fā)出連接,并由命令USER/PASS對(duì)在網(wǎng)絡(luò)上發(fā)送明文用戶名和口令給服務(wù)器進(jìn)行身份確認(rèn)。一旦確認(rèn)成功,便轉(zhuǎn)入處理狀態(tài)。</p><p> 1.2 ESMTP協(xié)議</p><p> ESMTP英文全稱是“Extended SMTP”,是對(duì)SMTP協(xié)議的擴(kuò)展,為了防止垃圾郵件的泛濫,采用了身份驗(yàn)證機(jī)制。在登陸服務(wù)器后需經(jīng)過(guò)身份驗(yàn)證才能發(fā)信。其他部分同S
8、MTP協(xié)議基本一樣。命令A(yù)UTH LOGIN表示開(kāi)始身份驗(yàn)證,然后是用戶名和密碼的驗(yàn)證。用戶名和密碼都是使用Base64編碼。</p><p> 1.2.1 SMTP協(xié)議:</p><p> SMTP稱為簡(jiǎn)單郵件傳輸協(xié)議(Simple Mail Transfer Protocol),目標(biāo)是向用戶提供高效、可靠的郵件傳輸。SMTP的一個(gè)重要特點(diǎn)是它能夠在傳送中接力傳送郵件,即郵件可以通
9、過(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)端口,用于接收用戶的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ù)字代碼。</p><p> 1.
10、2.2 Base64編碼:</p><p> 由于歷史原因,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編碼。</p><p> Base64編碼的思想是采用64個(gè)基本的A
11、SCII碼字符對(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è)“=”。</p><p>
12、2 水文信息共享系統(tǒng)實(shí)現(xiàn)</p><p> 該系統(tǒng)通過(guò)網(wǎng)絡(luò)郵件收發(fā)協(xié)議進(jìn)行水文信息的傳送。從信息保密的角度出發(fā),發(fā)送協(xié)議我們采用具有身份驗(yàn)證機(jī)制的ESMTP協(xié)議;從信息可讀性角度出發(fā),即信息編碼方式的限制,我們通過(guò)Base64編碼進(jìn)行解決;接收采用通用的POP3協(xié)議完成。</p><p> 2.1 數(shù)據(jù)交換流程</p><p> 當(dāng)分中心需要將信息上報(bào)給管理處
13、時(shí),需要先設(shè)置郵件發(fā)送端口號(hào)以及郵件服務(wù)器,接著驗(yàn)證用戶身份,然后是發(fā)送信息的添加和發(fā)送;接收方利用POP3協(xié)議到郵件服務(wù)器上進(jìn)行下載,其中關(guān)鍵是附件的處理,當(dāng)信息從郵件服務(wù)器中下載到接收方,則完成了一次信息交換。</p><p> 圖1 數(shù)據(jù)交換示意圖</p><p> 從上圖中可以把整個(gè)數(shù)據(jù)交換流程劃分為三個(gè)部分:郵件發(fā)送,郵件接收和郵件處理。</p><p&g
14、t; 1)郵件發(fā)送:把郵件從本地發(fā)送到郵件服務(wù)器。</p><p> 首先,設(shè)置郵件發(fā)送的端口號(hào)和郵件服務(wù)器;進(jìn)行服務(wù)器連接;</p><p> 其次,將用戶名和密碼經(jīng)過(guò)Base64編碼,并且發(fā)送進(jìn)行驗(yàn)證;</p><p><b> 最后,郵件發(fā)送。</b></p><p> 2)郵件接收:把郵件從服務(wù)器下載到
15、本地并處理附件。</p><p> 主要應(yīng)用POP3協(xié)議將郵件從服務(wù)器進(jìn)行郵件下載。其主要流程如圖3所示:</p><p><b> 圖2 發(fā)郵件流程圖</b></p><p> 首先,設(shè)置郵件接收端口號(hào)和下載郵件服務(wù)器;然后進(jìn)行服務(wù)器連接;</p><p> 其次,用戶名和密碼檢驗(yàn);</p>&l
16、t;p> 最后,郵件接收和附件處理。</p><p><b> 圖3 收郵件流程圖</b></p><p> 3)郵件處理:構(gòu)建和分析郵件的各個(gè)部件(郵件頭,郵件體,附件等)。</p><p> 該部分為整個(gè)系統(tǒng)實(shí)現(xiàn)的重點(diǎn)也是關(guān)鍵。它主要完成郵件體的生成、附件添加、以及接收郵件后郵件的解析和附件的處理等。</p>&
17、lt;p> 郵件的生成主要通過(guò)CMimeMessage、CMimeBody、CMimeHeader類。首先創(chuàng)建CMimeField類創(chuàng)建郵件項(xiàng)列表,然后CMimeHeader進(jìn)行郵件的頭部的生成,并存放到郵件項(xiàng)列表中;郵件體通過(guò)CMimeBody進(jìn)行創(chuàng)建,加載附件,最后再調(diào)用CMimeMessage類構(gòu)成郵件;實(shí)現(xiàn)代碼如下:</p><p> CMimeMessage mail;</p>
18、<p> //設(shè)置郵件各項(xiàng)的值</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ù)見(jiàn)附件");</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> 郵件解析主要實(shí)現(xiàn)郵件附件的處理,它通過(guò)定義中間文檔將附件拷貝到內(nèi)存當(dāng)中,然后再?gòu)膬?nèi)存中將數(shù)據(jù)讀出,然后以與郵件名同名的文件將附件存放到用戶設(shè)定的目錄下;實(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> //打開(kāi)接收到的文件</p><p> File.Open("a.txt",CFile::mode
26、Read); </p><p><b> //得到文件的大小</b></p><p> LONG FileSize=File.GetLength();</p><p> //建立緩沖區(qū)來(lái)存放讀取文件的內(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> //存儲(chǔ)附件到當(dāng)前目錄</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、實(shí)現(xiàn)</p><p> 該系統(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)。</p><p> 從圖4中可以看出通過(guò)CMimeHeader,CMimeBody和CMimeMessage主要用于郵件體的生成和解析;CSmtp類用于郵件發(fā)送;CPop3用于郵件接收。</p>&
33、lt;p><b> 4 結(jié)語(yǔ)</b></p><p> 基于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)用良好。</p><p><b> 參考文獻(xiàn)</b></p>
34、;<p> [1] 潘愛(ài)民譯. Visual C++技術(shù)內(nèi)幕(第4版)[M]. 北京:清華大學(xué)出版社,2004</p><p> [2] 汪曉平,鐘軍. Visual C++網(wǎng)絡(luò)通信協(xié)議分析與應(yīng)用實(shí)現(xiàn)[M]. 北京:人民郵電出版社,2003</p><p> [3] 張建云,姚永熙,唐鎮(zhèn)松. 我國(guó)水文自動(dòng)測(cè)報(bào)系統(tǒng)的發(fā)展與探討[J]. 水文,2006,26(3):53-5
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 水文數(shù)據(jù)共享平臺(tái)移動(dòng)端的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于java的數(shù)據(jù)共享平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)【開(kāi)題報(bào)告】
- 基于元數(shù)據(jù)的氣象科學(xué)數(shù)據(jù)共享系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 35883.基于元數(shù)據(jù)的氣象科學(xué)數(shù)據(jù)共享平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
- 數(shù)據(jù)交換與共享系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)數(shù)據(jù)交換與共享系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 共享數(shù)據(jù)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于Hadoop的煤炭企業(yè)數(shù)據(jù)共享平臺(tái)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于ODS的綜合數(shù)據(jù)共享體系的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于XML的高校共享數(shù)據(jù)中心的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 工商系統(tǒng)數(shù)據(jù)共享的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于XML的異構(gòu)數(shù)據(jù)庫(kù)共享的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 數(shù)據(jù)共享與數(shù)據(jù)交換系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于數(shù)據(jù)共享平臺(tái)的經(jīng)濟(jì)預(yù)測(cè)分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于光纖通道的文件級(jí)數(shù)據(jù)共享系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于共享數(shù)據(jù)庫(kù)科研管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于XML的異質(zhì)數(shù)據(jù)庫(kù)數(shù)據(jù)共享與實(shí)現(xiàn).pdf
- 基于OPeNDAP協(xié)議的海洋數(shù)據(jù)文件共享平臺(tái)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 43717.基于元數(shù)據(jù)的氣象信息共享平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于Web Service的客運(yùn)數(shù)據(jù)共享平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 11547.基于web的海洋科研數(shù)據(jù)共享系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論