基于WinInet的FTP應(yīng)用
- 期刊名字:西安工程科技學(xué)院學(xué)報
- 文件大小:149kb
- 論文作者:曲雙為,馬柯
- 作者單位:西安工程大學(xué)
- 更新時間:2020-06-12
- 下載次數(shù):次
西安工程科技學(xué)院學(xué)報Journal of Xi'an University of Engineering Science and Technology第20卷第4期(總80期)2006年8月Vol 20. No 4(Sum No. 80)文章編號:1671-850X(2006)04-0486-04基于 WinInet的FTP應(yīng)用曲雙為,馬柯(西安工程大學(xué)機(jī)電學(xué)院,陜西西安710048)摘要:探討通過 Internet訪問企業(yè)內(nèi)部局域網(wǎng)的數(shù)據(jù)問題.給出了在VB環(huán)境下,基于 WinInetd開發(fā)FTP應(yīng)用的方法.闡述了文件異步傳輸?shù)膶崿F(xiàn)手段,并給出了關(guān)鍵的實現(xiàn)代碼.本系統(tǒng)經(jīng)過客戶測試證明是安全、穩(wěn)定、可靠的關(guān)鍵詞:VB; WinInet;FTP應(yīng)用中圖分類號:TP311.52文獻(xiàn)標(biāo)識碼:A0引言隨著計算機(jī)技術(shù)的發(fā)展以及計算機(jī)技術(shù)在企業(yè)信息化管理中的應(yīng)用,如何對企業(yè)的信息進(jìn)行有效的管理,使信息在企業(yè)的各個環(huán)節(jié)合理地流動顯得非常重要.為此,筆者給客戶開發(fā)了一套主要應(yīng)用于局域網(wǎng)內(nèi)的數(shù)據(jù)庫信息管理軟件.客戶可以不在單位內(nèi)的局域網(wǎng)內(nèi),例如在家中或囯內(nèi)外任何其他地方,只要計算機(jī)能夠與 Internet連接就可以取得單位局域網(wǎng)內(nèi)服務(wù)器上的數(shù)據(jù)對于許多中小企業(yè)來說,一般不具備專門的數(shù)據(jù)專線來進(jìn)行數(shù)據(jù)的傳輸,如果傳輸?shù)臄?shù)據(jù)量不大、要求傳輸速度不高、數(shù)據(jù)的實時性不強(qiáng),也沒有使用專線的必要個Internet客戶端程序的目的是通過Internet協(xié)議,如:HTTP、FTP等來存取網(wǎng)絡(luò)數(shù)據(jù)源(服務(wù)器)的信息.客戶端程序可以訪問服務(wù)器獲得數(shù)據(jù),甚至是與服務(wù)器交換信息. Internet客戶端程序可以通過外部網(wǎng)絡(luò)( Internet)或內(nèi)部網(wǎng)絡(luò)(一般為 Intranet)訪問服務(wù)器.通過使用 Internet客戶端程序來存取網(wǎng)絡(luò)數(shù)據(jù),滿足沒有數(shù)據(jù)專線的企業(yè)進(jìn)行數(shù)據(jù)的傳輸需求.在 Internet上租用FTP空間來存儲客戶所需的數(shù)據(jù),通過 Internet客戶端程序?qū)⒕钟蚓W(wǎng)內(nèi)的數(shù)據(jù)定期經(jīng)過篩選、加密、壓縮后上傳FTP服務(wù)器.客戶隨時從FTP服務(wù)器上下載數(shù)據(jù),然后經(jīng)過解密、解壓縮后將數(shù)據(jù)導(dǎo)入到本地的數(shù)據(jù)庫中,功能類似于計算機(jī)升級病毒庫對于向FTP上傳、下載數(shù)據(jù)要采用的方法,設(shè)計人員要作出選擇.第一種方法采用第三方FTP軟件或操作系統(tǒng)自帶的軟件完成上傳、下載,用戶自己指定I地址、用戶名、密碼來訪問FTP服務(wù)器;第二種方法就是開發(fā)人員獨立開發(fā)一套基于FTP協(xié)議的文件傳輸軟件,由單位局域網(wǎng)內(nèi)的計算機(jī)定時向FTP站點上傳數(shù)據(jù),具有下載期限、在任何地點的計算機(jī)終端都可以從指定的FTP站點上下載數(shù)據(jù),并自動整合到本地的計算機(jī)數(shù)據(jù)庫中.對于用戶來說,第一種方案使用起來繁瑣、效率低、保密性差,對用戶的計算機(jī)操作水平要求較高,而第二種方案完全避免了第一種方案旳缺點,并且保證了數(shù)據(jù)庫信息管理軟件系統(tǒng)的整體性,所以采用第二種方案來實施V凵中國煤化工1開發(fā)FTP客戶端程序的一般步驟CNMHG為了開發(fā) Internet客戶端程序. Windows提供了專門的win32 Internet擴(kuò)展接口,也就是 WinInet.收稿日期:2006-06-01通訊恨釣齡(1968-),男,河北省獻(xiàn)縣人,西安工程大學(xué)副教授 E-mail: qushuangwei fangzhi.ce第4期基于 WinInet的FTP應(yīng)用487win32Internet擴(kuò)展提供了對普通Internet協(xié)議的訪問,這些協(xié)議包括HTTP、FTP和Gopher.Gopher已經(jīng)漸漸淡岀.借助于 WinInet編程接口,開發(fā)人員不必去了解 Winsock、TCP/IP和特定 Internet協(xié)議的細(xì)節(jié)就可以編寫出高水平的Internet客戶端程序.WinInet為幾種協(xié)議(HTTP、FTP和Gopher)提供了統(tǒng)一的函數(shù)集,也就是win32API接口.利用這些統(tǒng)一的函數(shù)集,簡化了針對HTTP、FTP等協(xié)議的編程,從而輕松地將Internet集成到自己的應(yīng)用程序中.底層協(xié)議的轉(zhuǎn)換(如從FTP到HTTP)只要對源代碼稍作修改就可以完成(見表1).使用 WinInet提供的API函數(shù).文件傳輸協(xié)議(FTP)是IP世界的核心協(xié)議. WINDOWS已經(jīng)在 WinInet.dl中為軟件開發(fā)人員提供了FTP開發(fā)的功能.這個DLL是與 Internet Explorer和其他一些內(nèi)容集成在一起的,處理有關(guān)FTP協(xié)議的低級任務(wù)2表1開發(fā)FTP應(yīng)用的一般步驟設(shè)置環(huán)境初始化調(diào)用 InternetOpen函數(shù)建立一個與服務(wù)器的FTP連接InternetConnect對象CD到FTP服務(wù)器的一個新目錄用 SetCurrentDirectoryFind第一個FTP目錄中的文件FindFile, OpenURL函數(shù)返回一個只讀資源對象枚舉所有可獲得的資源,Find下一個FTP目錄中的調(diào)用 FindNextfile直到返回 FALSE.Find下一個文件文件,Find下一個資源如果文件沒找到,返回 FALSE打開 FindFile或 FindNextFile找到的文件調(diào)用 Open File,參數(shù)為 FindFile或 FindNextFile返回的文件名讀文件,以讀方式打開FTP文件用Read使用你指定的緩沖讀指定的字節(jié)數(shù)寫FTP文件,以寫方式打開FTP文件調(diào)用 Write,使用你指定的緩沖寫指定的字節(jié)數(shù)改變客戶端在服務(wù)器上的目錄調(diào)用 Setcurrent Directory進(jìn)入新的目錄獲取客戶端在服務(wù)器上的當(dāng)前目錄調(diào)用 GetCurrentDirectory獲取目錄信息檢查FTP目錄是否正確A Get Current Directory e Get Current Directory AsURI返回目錄名字服務(wù)器目錄或返回目錄的URL刪除 Findfile或 FindNextFile找到的文件Remove用 FindFile或 FindNextfile返回的文件自動清除打開的句柄的連接2FTP客戶端基本傳輸功能的實現(xiàn)2.1通過調(diào)用 InternetOpen函數(shù)設(shè)置環(huán)境參數(shù) lAccess Type:指定是直接與某一主機(jī)相連還是使用代理服務(wù)器進(jìn)行連接.調(diào)用是這樣的:Inglnet= InternetOpen("My FTP Test, 1, vbNullString, vbNullString, 0)Inglnet為0表示函數(shù)調(diào)用失敗,如果調(diào)用成功,則 Inglnet可以作為句柄的值傳遞給 Internet Connect函數(shù)2.2通過調(diào)用 Internet connect函數(shù)與主機(jī)連接hInternet session: InternetOpen調(diào)用返回的句柄值sServerName:要連接的FTP服務(wù)器的IP地址或主機(jī)名n ServerPort:指示與哪一個端口連接,0表示使用默認(rèn)端口21USername和 pAssword分別傳遞用戶名和囗令I(lǐng)nglnet Con= Internet Connect (IngInet, ftp. microsoft, com.0.',mv(a163. com, 1,0,0)IngInetCon為0表示函數(shù)調(diào)用失敗,如果調(diào)用成功,則中國煤化工值傳遞給 FtpGet file2.3用 FtpGet file函數(shù)完成從FTP服務(wù)器上讀取文件爿CNMHGfTp Session: Internetconnect調(diào)用返回的句柄值lpszRemote file:FTP服務(wù)器上的文件名; lpszNew File:在本地要創(chuàng)建的文件名fFaillfexists:表示可以替換本地相同的文件,1表示如果本地文件已經(jīng)存在則取消本次操作.dwFlags:1表據(jù)sC傳輸文件,2表示用二進(jìn)制傳輸文件488西安工程科技學(xué)院學(xué)報第20卷bIro= FtpGetfile( IngInet con,“my.txt”,"d:\my.txt”,0,0,1,o)如果函數(shù)調(diào)用成功, bIro為True,反之為 False.2.4調(diào)用 FtpPutFile函數(shù)上傳文件bInRC= FtpPut File(Inglnet Con, App. path &. "\MyMDB rar","Invoice. rar",1. 0)如果函數(shù)調(diào)用成功,bnRC為True,反之為 False需要注意的是,匿名用戶無權(quán)在FTP服務(wù)器上創(chuàng)建文件.所以要確定用來與FTP服務(wù)器連接的用戶帳號要有創(chuàng)建文件的權(quán)限否則 Ftp Put File函數(shù)調(diào)用就會返回 False通過以上函數(shù)的使用可以完成最基本的文件上傳、下載功能,但是在文件傳輸過程中的一些變化的信息無法獲取,使得用戶無法獲知傳輸何時結(jié)束、當(dāng)前傳輸狀態(tài)如何等.要取得這些信息,必須采用文件異步傳輸3文件異步傳輸?shù)膶崿F(xiàn)wininet提供了接口 FtpGetFile實現(xiàn)從ftp服務(wù)器下載文件;也提供了接囗 FtpPutFile實現(xiàn)把文件上傳到ftp服務(wù)器上.通過這兩個接口,能夠完成基本的FTP文件傳輸客戶端功能在下載FTP服務(wù)區(qū)上的遠(yuǎn)程時,為了使界面更加友好以及增強(qiáng)用戶的控制權(quán),軟件界面需要顯示以下的相關(guān)信息:①當(dāng)前文件的總字節(jié)數(shù);②已下載的字節(jié)數(shù);③剩余字節(jié)數(shù);④已下載百分比;⑤已經(jīng)耗時;⑥剩余時間;⑦平均傳輸速度其中的關(guān)鍵參數(shù)是①當(dāng)前文件的總字節(jié)數(shù)和②已下載的字節(jié)數(shù),其他參數(shù)可以根據(jù)這兩個參數(shù)再結(jié)合時間因素計算出來3.1通過 FtpOpenfile和 FtpGet File Size取得遠(yuǎn)程文件大小通過 FtpGet Filesize的返回值就是要下載的遠(yuǎn)程文件字節(jié)數(shù),其中 hFile為 FtpOpen file返回的句柄值hFile= FtpOpen File (IngInetCon, Remote File, GENERIC READ, 1,0)If hfile 0 Then exit functionIng File Size- FtpGet FileSize (hFile, INumberOfBytes Read)SB. Panels(2).Text="總字節(jié):"8. Format( IngFilesize/024,"#,0")8."KBProgress Barl Min= 1: Progress Barl. Max= CLng(Ing File Size/1024)3.2異步傳輸實現(xiàn)方法(I對于所提到的另外一個關(guān)鍵參數(shù):已下載的字節(jié)數(shù),要想不斷地取得該參數(shù),必須要采取文件異步傳輸?shù)姆椒?否則,前臺程序無法取得控制權(quán).可以利用 Internet ReadFile函數(shù)來實現(xiàn)Do While truebRet= InternetReadFile(hFile, sRead Buffer(0), 2048, INumberOfBytes Read)ReDim Preserve sReadBuffer(o To INumberOfBytes Read -1)Put intFH,, sReadBufferSB. Panels(3). Text ="EF#i: " 8. Format(pub BytesRecieved/1024,"# 0")SB. Panels(4). Text ="i*E "8. pub BytesRecieved Ing FileSize 100oop3.3異步傳輸實現(xiàn)方法(Ⅱ)利用 Internet Set Status Callback建立回調(diào)函數(shù)Public Function Ftp Callback Status( By val hInternet中國煤化工 text as lon,ByvldwInternet Status As LongHCNMHGBy val lpvStatusInfo As Long, By Val dw StatusInfoLength As Long) As longcBuffer= Space s(dw StatusInfolength)Select case dwlnternet statusCaseiXFEENET STATUS SENDING REQUEST第4期基于 WinInet的FTP應(yīng)用489MoveMemory dwRead, By val lpvStatusInfo, dw StatusInfoLengthSelect Case Current StateCase ftP uploadingMsg="已上傳:"8. Format( pub Bytes Sent/1024,"#,0")8."KBEnd selectCase INTERNET STATUS RESPONSE RECEIVEDMoveMemory dw Read, By Val lpvStatusInfo, dw StatusInfolengthSelect case current stateCase FTP DOWNLOaDINgMsg="已下載字節(jié):"8. Format(pub_ BytesRecieved/1024,"#,0")8."KBEnd selectEnd SelectEnd function4結(jié)束語本程序經(jīng)過客戶在國內(nèi)幾個地點和在美國的測試全部運行正常,下載數(shù)據(jù)正確,得到了客戶的肯定但在上傳FTP站點數(shù)據(jù)的選取上,從數(shù)據(jù)庫的角度來說,還需要再進(jìn)行優(yōu)化,減少冗余數(shù)據(jù)的傳輸,以達(dá)到提高文件傳輸效率的目的參考文獻(xiàn)1]武新華.VC∴NET管理信息系統(tǒng)開發(fā)案例[M].西安:西安電子科技大學(xué)出版社,2005:145-146]李博軒.VC6.0網(wǎng)絡(luò)及 Internet開發(fā)指南[M].北京:清華大學(xué)出版社,2000:300-304Developing FTP Application on the basis of winInetQU Shuang-wei, MA Ke( School of Mechanical and Electrical Engineering, Xi an Polytechnic University, Xi an 710048, China)Abstract: To get the intranet data through internet, the paper gives a method of developing the ftp ap-plication on the basis of wininet dynamic link library file with the micro-soft visual basic language environment. It laies emphasis on the means of realizing file asynchronous transfer and the key code is givenWith the test of users. it is safe and stableKey words VB; WinInet; FTP Application編輯:董軍浪;校對:武暉H中國煤化工CNMHG
-
C4烯烴制丙烯催化劑 2020-06-12
-
煤基聚乙醇酸技術(shù)進(jìn)展 2020-06-12
-
生物質(zhì)能的應(yīng)用工程 2020-06-12
-
我國甲醇工業(yè)現(xiàn)狀 2020-06-12
-
石油化工設(shè)備腐蝕與防護(hù)參考書十本免費下載,絕版珍藏 2020-06-12
-
四噴嘴水煤漿氣化爐工業(yè)應(yīng)用情況簡介 2020-06-12
-
Lurgi和ICI低壓甲醇合成工藝比較 2020-06-12
-
甲醇制芳烴研究進(jìn)展 2020-06-12
-
精甲醇及MTO級甲醇精餾工藝技術(shù)進(jìn)展 2020-06-12
