

基于WinInet的FTP應用
- 期刊名字:西安工程科技學(xué)院學(xué)報
- 文件大?。?49kb
- 論文作者:曲雙為,馬柯
- 作者單位:西安工程大學(xué)
- 更新時(shí)間:2020-06-12
- 下載次數:次
西安工程科技學(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應用曲雙為,馬柯(西安工程大學(xué)機電學(xué)院,陜西西安710048)摘要:探討通過(guò) Internet訪(fǎng)問(wèn)企業(yè)內部局域網(wǎng)的數據問(wèn)題.給出了在VB環(huán)境下,基于 WinInetd開(kāi)發(fā)FTP應用的方法.闡述了文件異步傳輸的實(shí)現手段,并給出了關(guān)鍵的實(shí)現代碼.本系統經(jīng)過(guò)客戶(hù)測試證明是安全、穩定、可靠的關(guān)鍵詞:VB; WinInet;FTP應用中圖分類(lèi)號:TP311.52文獻標識碼:A0引言隨著(zhù)計算機技術(shù)的發(fā)展以及計算機技術(shù)在企業(yè)信息化管理中的應用,如何對企業(yè)的信息進(jìn)行有效的管理,使信息在企業(yè)的各個(gè)環(huán)節合理地流動(dòng)顯得非常重要.為此,筆者給客戶(hù)開(kāi)發(fā)了一套主要應用于局域網(wǎng)內的數據庫信息管理軟件.客戶(hù)可以不在單位內的局域網(wǎng)內,例如在家中或囯內外任何其他地方,只要計算機能夠與 Internet連接就可以取得單位局域網(wǎng)內服務(wù)器上的數據對于許多中小企業(yè)來(lái)說(shuō),一般不具備專(zhuān)門(mén)的數據專(zhuān)線(xiàn)來(lái)進(jìn)行數據的傳輸,如果傳輸的數據量不大、要求傳輸速度不高、數據的實(shí)時(shí)性不強,也沒(méi)有使用專(zhuān)線(xiàn)的必要個(gè)Internet客戶(hù)端程序的目的是通過(guò)Internet協(xié)議,如:HTTP、FTP等來(lái)存取網(wǎng)絡(luò )數據源(服務(wù)器)的信息.客戶(hù)端程序可以訪(fǎng)問(wèn)服務(wù)器獲得數據,甚至是與服務(wù)器交換信息. Internet客戶(hù)端程序可以通過(guò)外部網(wǎng)絡(luò )( Internet)或內部網(wǎng)絡(luò )(一般為 Intranet)訪(fǎng)問(wèn)服務(wù)器.通過(guò)使用 Internet客戶(hù)端程序來(lái)存取網(wǎng)絡(luò )數據,滿(mǎn)足沒(méi)有數據專(zhuān)線(xiàn)的企業(yè)進(jìn)行數據的傳輸需求.在 Internet上租用FTP空間來(lái)存儲客戶(hù)所需的數據,通過(guò) Internet客戶(hù)端程序將局域網(wǎng)內的數據定期經(jīng)過(guò)篩選、加密、壓縮后上傳FTP服務(wù)器.客戶(hù)隨時(shí)從FTP服務(wù)器上下載數據,然后經(jīng)過(guò)解密、解壓縮后將數據導入到本地的數據庫中,功能類(lèi)似于計算機升級病毒庫對于向FTP上傳、下載數據要采用的方法,設計人員要作出選擇.第一種方法采用第三方FTP軟件或操作系統自帶的軟件完成上傳、下載,用戶(hù)自己指定I地址、用戶(hù)名、密碼來(lái)訪(fǎng)問(wèn)FTP服務(wù)器;第二種方法就是開(kāi)發(fā)人員獨立開(kāi)發(fā)一套基于FTP協(xié)議的文件傳輸軟件,由單位局域網(wǎng)內的計算機定時(shí)向FTP站點(diǎn)上傳數據,具有下載期限、在任何地點(diǎn)的計算機終端都可以從指定的FTP站點(diǎn)上下載數據,并自動(dòng)整合到本地的計算機數據庫中.對于用戶(hù)來(lái)說(shuō),第一種方案使用起來(lái)繁瑣、效率低、保密性差,對用戶(hù)的計算機操作水平要求較高,而第二種方案完全避免了第一種方案旳缺點(diǎn),并且保證了數據庫信息管理軟件系統的整體性,所以采用第二種方案來(lái)實(shí)施V凵中國煤化工1開(kāi)發(fā)FTP客戶(hù)端程序的一般步驟CNMHG為了開(kāi)發(fā) Internet客戶(hù)端程序. Windows提供了專(zhuān)門(mén)的win32 Internet擴展接口,也就是 WinInet.收稿日期:2006-06-01通訊恨釣齡(1968-),男,河北省獻縣人,西安工程大學(xué)副教授 E-mail: qushuangwei fangzhi.ce第4期基于 WinInet的FTP應用487win32Internet擴展提供了對普通Internet協(xié)議的訪(fǎng)問(wèn),這些協(xié)議包括HTTP、FTP和Gopher.Gopher已經(jīng)漸漸淡岀.借助于 WinInet編程接口,開(kāi)發(fā)人員不必去了解 Winsock、TCP/IP和特定 Internet協(xié)議的細節就可以編寫(xiě)出高水平的Internet客戶(hù)端程序.WinInet為幾種協(xié)議(HTTP、FTP和Gopher)提供了統一的函數集,也就是win32API接口.利用這些統一的函數集,簡(jiǎn)化了針對HTTP、FTP等協(xié)議的編程,從而輕松地將Internet集成到自己的應用程序中.底層協(xié)議的轉換(如從FTP到HTTP)只要對源代碼稍作修改就可以完成(見(jiàn)表1).使用 WinInet提供的API函數.文件傳輸協(xié)議(FTP)是IP世界的核心協(xié)議. WINDOWS已經(jīng)在 WinInet.dl中為軟件開(kāi)發(fā)人員提供了FTP開(kāi)發(fā)的功能.這個(gè)DLL是與 Internet Explorer和其他一些內容集成在一起的,處理有關(guān)FTP協(xié)議的低級任務(wù)2表1開(kāi)發(fā)FTP應用的一般步驟設置環(huán)境初始化調用 InternetOpen函數建立一個(gè)與服務(wù)器的FTP連接InternetConnect對象CD到FTP服務(wù)器的一個(gè)新目錄用 SetCurrentDirectoryFind第一個(gè)FTP目錄中的文件FindFile, OpenURL函數返回一個(gè)只讀資源對象枚舉所有可獲得的資源,Find下一個(gè)FTP目錄中的調用 FindNextfile直到返回 FALSE.Find下一個(gè)文件文件,Find下一個(gè)資源如果文件沒(méi)找到,返回 FALSE打開(kāi) FindFile或 FindNextFile找到的文件調用 Open File,參數為 FindFile或 FindNextFile返回的文件名讀文件,以讀方式打開(kāi)FTP文件用Read使用你指定的緩沖讀指定的字節數寫(xiě)FTP文件,以寫(xiě)方式打開(kāi)FTP文件調用 Write,使用你指定的緩沖寫(xiě)指定的字節數改變客戶(hù)端在服務(wù)器上的目錄調用 Setcurrent Directory進(jìn)入新的目錄獲取客戶(hù)端在服務(wù)器上的當前目錄調用 GetCurrentDirectory獲取目錄信息檢查FTP目錄是否正確A Get Current Directory e Get Current Directory AsURI返回目錄名字服務(wù)器目錄或返回目錄的URL刪除 Findfile或 FindNextFile找到的文件Remove用 FindFile或 FindNextfile返回的文件自動(dòng)清除打開(kāi)的句柄的連接2FTP客戶(hù)端基本傳輸功能的實(shí)現2.1通過(guò)調用 InternetOpen函數設置環(huán)境參數 lAccess Type:指定是直接與某一主機相連還是使用代理服務(wù)器進(jìn)行連接.調用是這樣的:Inglnet= InternetOpen("My FTP Test, 1, vbNullString, vbNullString, 0)Inglnet為0表示函數調用失敗,如果調用成功,則 Inglnet可以作為句柄的值傳遞給 Internet Connect函數2.2通過(guò)調用 Internet connect函數與主機連接hInternet session: InternetOpen調用返回的句柄值sServerName:要連接的FTP服務(wù)器的IP地址或主機名n ServerPort:指示與哪一個(gè)端口連接,0表示使用默認端口21USername和 pAssword分別傳遞用戶(hù)名和囗令I(lǐng)nglnet Con= Internet Connect (IngInet, ftp. microsoft, com.0.',mv(a163. com, 1,0,0)IngInetCon為0表示函數調用失敗,如果調用成功,則中國煤化工值傳遞給 FtpGet file2.3用 FtpGet file函數完成從FTP服務(wù)器上讀取文件爿CNMHGfTp Session: Internetconnect調用返回的句柄值lpszRemote file:FTP服務(wù)器上的文件名; lpszNew File:在本地要創(chuàng )建的文件名fFaillfexists:表示可以替換本地相同的文件,1表示如果本地文件已經(jīng)存在則取消本次操作.dwFlags:1表?yè)C傳輸文件,2表示用二進(jìn)制傳輸文件488西安工程科技學(xué)院學(xué)報第20卷bIro= FtpGetfile( IngInet con,“my.txt”,"d:\my.txt”,0,0,1,o)如果函數調用成功, bIro為T(mén)rue,反之為 False.2.4調用 FtpPutFile函數上傳文件bInRC= FtpPut File(Inglnet Con, App. path &. "\MyMDB rar","Invoice. rar",1. 0)如果函數調用成功,bnRC為T(mén)rue,反之為 False需要注意的是,匿名用戶(hù)無(wú)權在FTP服務(wù)器上創(chuàng )建文件.所以要確定用來(lái)與FTP服務(wù)器連接的用戶(hù)帳號要有創(chuàng )建文件的權限否則 Ftp Put File函數調用就會(huì )返回 False通過(guò)以上函數的使用可以完成最基本的文件上傳、下載功能,但是在文件傳輸過(guò)程中的一些變化的信息無(wú)法獲取,使得用戶(hù)無(wú)法獲知傳輸何時(shí)結束、當前傳輸狀態(tài)如何等.要取得這些信息,必須采用文件異步傳輸3文件異步傳輸的實(shí)現wininet提供了接口 FtpGetFile實(shí)現從ftp服務(wù)器下載文件;也提供了接囗 FtpPutFile實(shí)現把文件上傳到ftp服務(wù)器上.通過(guò)這兩個(gè)接口,能夠完成基本的FTP文件傳輸客戶(hù)端功能在下載FTP服務(wù)區上的遠程時(shí),為了使界面更加友好以及增強用戶(hù)的控制權,軟件界面需要顯示以下的相關(guān)信息:①當前文件的總字節數;②已下載的字節數;③剩余字節數;④已下載百分比;⑤已經(jīng)耗時(shí);⑥剩余時(shí)間;⑦平均傳輸速度其中的關(guān)鍵參數是①當前文件的總字節數和②已下載的字節數,其他參數可以根據這兩個(gè)參數再結合時(shí)間因素計算出來(lái)3.1通過(guò) FtpOpenfile和 FtpGet File Size取得遠程文件大小通過(guò) FtpGet Filesize的返回值就是要下載的遠程文件字節數,其中 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="總字節:"8. Format( IngFilesize/024,"#,0")8."KBProgress Barl Min= 1: Progress Barl. Max= CLng(Ing File Size/1024)3.2異步傳輸實(shí)現方法(I對于所提到的另外一個(gè)關(guān)鍵參數:已下載的字節數,要想不斷地取得該參數,必須要采取文件異步傳輸的方法.否則,前臺程序無(wú)法取得控制權.可以利用 Internet ReadFile函數來(lái)實(shí)現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異步傳輸實(shí)現方法(Ⅱ)利用 Internet Set Status Callback建立回調函數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應用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="已下載字節:"8. Format(pub_ BytesRecieved/1024,"#,0")8."KBEnd selectEnd SelectEnd function4結束語(yǔ)本程序經(jīng)過(guò)客戶(hù)在國內幾個(gè)地點(diǎn)和在美國的測試全部運行正常,下載數據正確,得到了客戶(hù)的肯定但在上傳FTP站點(diǎn)數據的選取上,從數據庫的角度來(lái)說(shuō),還需要再進(jìn)行優(yōu)化,減少冗余數據的傳輸,以達到提高文件傳輸效率的目的參考文獻1]武新華.VC∴NET管理信息系統開(kāi)發(fā)案例[M].西安:西安電子科技大學(xué)出版社,2005:145-146]李博軒.VC6.0網(wǎng)絡(luò )及 Internet開(kāi)發(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ì)能的應用工程 2020-06-12
-
我國甲醇工業(yè)現狀 2020-06-12
-
JB/T 11699-2013 高處作業(yè)吊籃安裝、拆卸、使用技術(shù)規程 2020-06-12
-
石油化工設備腐蝕與防護參考書(shū)十本免費下載,絕版珍藏 2020-06-12
-
四噴嘴水煤漿氣化爐工業(yè)應用情況簡(jiǎn)介 2020-06-12
-
Lurgi和ICI低壓甲醇合成工藝比較 2020-06-12
-
甲醇制芳烴研究進(jìn)展 2020-06-12
-
精甲醇及MTO級甲醇精餾工藝技術(shù)進(jìn)展 2020-06-12