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