ndfweb.cn

INET控件的用法


2009-04-22 08:50:01 (7754)



對於FTP,你可以使用Execute方法執行FTP命令SIZE獲得文件大小。然後在StateChanged事件中可以獲得返回的文件大小。
Private Sub Command1_Click()
Inet1.Execute "ftp://127.0.0.1", "SIZE 1.gif"
End Sub

Private Sub Inet1_StateChanged(ByVal State As Integer)
'State = 12 時,用 GetChunk 方法檢索服務器的響應。

Dim vtData As Variant ' Data variable.
Select Case State
'...沒有列舉其它情況。
Case icError '11
'出現錯誤時,返回 ResponseCode 和 ResponseInfo。
vtData = Inet1.ResponseCode & ":" & _
Inet1.ResponseInfo
Case icResponseCompleted ' 12


Dim strData As String
Dim bDone As Boolean: bDone = False

'取得第一個塊。
vtData = Inet1.GetChunk(1024, icString)
DoEvents

Do While Not bDone
strData = strData & vtData
'取得下一個塊。
vtData = Inet1.GetChunk(1024, icString)
DoEvents

If Len(vtData) = 0 Then
bDone = True
End If
Loop
MsgBox strData
End Select

End Sub

對於HTTP下載,你可以用GetHeader(Content-length)來獲得文件大小。但不是所有HTTP下載時都能獲得文件長度,特別是通過代理服務器下載文件時。如:
Private Sub Form_Load()
Inet1.Execute "http://askpro.yeah.net/"
End Sub

Private Sub Inet1_StateChanged(ByVal State As Integer)
If State = icResponseReceived Then
MsgBox "File size is " & Inet1.GetHeader("Content-Length")
End If
End Sub

==============================================

在VB中實現文件上傳
VisualBasic作為一個集應用程序開發、測試、查錯功能於一體的集成式開發環境,越來越受到程序員的青睞。筆者在開發某數據庫維護係統的過程中,選擇了VB5.0作為開發平台,Unix作為服務器端操作係統,Informix作為服務器數據庫。
問題的出現
在開發該維護係統的過程中,注意到Informix數據庫的字段類型CLOB填入數據時需要函數FILETOCLOB("FILENAME","SERVER"),其中的"FILENAME"需要指出文件路徑和文件名稱。然而,在維護過程中此文件是在客戶端執行的,這樣就要求即時將文件傳輸到服務器端。
解決辦法
1.FTP傳輸工具
我們首先使用FTP傳輸工具,用VB5.0中SHELL命令調用DOS批處理文件來實現傳輸的需要。
Shell調用格式:
Shell(pathname[,windowstyle])
例子:Shell("c:\windows\upload.bat")
批處理文件upload.bat的內容:
c:\windows\ftphostname
username
password
sendc:\zrh\upload.txtupload.txt
bye
該命令實現了文件"upload.txt"的傳輸要求。在使用完畢之後,再調用命令把該文件刪除。
例子:Shell("c:\windows\del_up.bat")
批處理文件del_up.bat的內容:
c:\windows\ftphostname
username
password
deleupload.txt
bye
這樣,文件"upload.txt"被刪除。
但是,另一個問題出現了。由於Shell函數的運行機製是與其它程序同步執行,也就是說,當調用Shell函數的子程序還沒有執行完畢之前,Shell函數後麵的語句已經執行。在大批量添加數據的過程中,就會出現某個記錄的文件還沒有傳到,而下一個插入語句(Insert)已經開始調用。這樣,ODBC調用就會出現錯誤。
2.INET控件
InternetTransfer控件提供了Internet上最常使用的兩種協議:HTTP和FTP。使用HTTP協議可以連接到WWW服務器上來下載文件;使用FTP協議則可以登錄到FTP服務器。一般的FTP命令,例如CD、GET都可以通過Execute方法實現。
下麵是一個設置INET控件屬性的例子。
inet1.URL=ftp://username:password@hostname/document
inet1.Protocol=2-icFTP
inet1.RemoteHost=hostname
inet1.RemotePort=21
inet1.Username=username
inet1.Password=password
執行文件傳輸:
Inet1.Execute"ftp://username:password@hostname",_
"PUT"&local_filename&"UPLOAD1.TXT"
right1=Inet1.StillExecuting
DoWhileright1
right1=Inet1.StillExecuting
DoEvents
Loop
這樣便實現了文件的上載。
*SINET控件的優點
INET控件與Shell()函數的不同之處在於INET控件通過調用語句
right1=Inet1.StillExecuting
DoWhileright1
right1=Inet1.StillExecuting
DoEvents
Loop來控製語句執行的順序。在文件傳輸工作未完成之前,程序不會執行其它語句,自然也就不會出現調用Shell函數所出現的問題。變量right1用來測試inet1的執行狀態,如果進程中仍在進行文件傳輸的工作,則調用過程DoEvents給係統空閑時間來做文件傳輸工作,這樣便成功地執行了文件上載的功能。該文件使用完畢之後將被刪除。
Inet1.Execute"ftp://informix:informix@rd",_
"DELETEUPLOAD1.TXT"
right1=Inet1.StillExecuting
DoWhileright1
right1=Inet1.StillExecuting
DoEvents
Loop
將上載的文件刪除是為了避免占用服務器端磁盤空間。
*S利用StateChanged事件提示信息
服務器在執行inet1.execute的同時也激活了Inet1_StateChanged事件,進程可以根據捕獲到的狀態進行動作。
object_StateChanged(ByValStateAsInteger)
State:整數類型Integer
下麵是狀態的說明。
常數值 描述icNone
0 未報告狀態icHostResolvingHost
1 控件正在尋找指定主機的IP地址icHostResolved
2 控件已成功找到指定主機的IP地址icConnecting
3 控件正在與指定主機進行連接icConnected
4 控件已成功與指定主機連接icRequesting
5 控件正在向主機發出請求icRequestSent
6 控件已成功向主機發出請求icReceivingResponse
7 控件正在從主機接收反饋信息icResponseReceived
8 控件已成功從主機接受反饋信息icDisconnecting
9 控件正在與主機斷開icDisconnected
10 控件已與主機斷開icError
11 在與主機通信的過程中發生了錯誤icResponseCompleted
12 請求結束且數據已經接收到
下麵是一個例子。
PrivateSubInet1_StateChanged(ByValStateAsInteger)
'RetrieveserverresponseusingtheGetChunk
'methodwhenState=12.Thisexampleassumesthe
'dataistext.
SelectCaseState
'...Othercasesnotshown.
CaseicResponseReceived'12
DimvtDataAsVariant'Datavariable.
DimstrDataAsString:strData=""
DimbDoneAsBoolean:bDone=False
'Getfirstchunk.
vtData=Inet1.GetChunk(1024,icString)
DoWhileNotbDone
strData=Data&vtData
'Getnextchunk.
vtData=Inet1.GetChunk(1024,icString)
IfLen(vtData)=0Then
bDone=True
EndIf
Loop
txtData.Text=strData
EndSelect
EndSub

==========================================
方法2,設置信息:
Inet1.Protocol = icFTP
Inet1.RemoteHost = ServerName'服務器地址
Inet1.RemotePort = 21'FTP端口
Inet1.UserName = uName'用戶名
Inet1.Password = uPWS'密碼

下載文件:
Inet1.Execute "", "GET 1.txt d:\1.txt"
ri = Inet1.StillExecuting
Do While ri
ri = Inet1.StillExecuting
DoEvents
Loop
上傳文件:
Inet1.Execute "", "PUT d:\1.txt 1.txt"
ri = Inet1.StillExecuting
Do While ri
ri = Inet1.StillExecuting
DoEvents
Loop

本文版权:http://www.ndfweb.cn/news-302.html
  NDF俱乐部
  国际域名注册
  建站咨询
简体中文 NDF网站建设淘宝店 | ICO图标在线生成 | 外贸网站建设 | 联系我们
©2007-2025 NDF Corporation 鲁ICP备08005967号 Sitemap - RSSRSS订阅