我做FTP客户端程序效率和占用系统资源非常严重,不知道怎么可以开一个缓存增加传输速度

解决方案 »

  1.   

    你用winsock来做,比API效率更高更稳定的
      

  2.   

    api有
    不知道怎么可以开一个缓存增加传输速度,这个好像没有
      

  3.   

    说真又是了.到底用winsock效率快,还是在VB里调用API的效率快呢?呵呵~真有得想了.
      

  4.   

    其实根本不是winsock跟API的效率问题
    用winsock是直接的FTP协议跟服务器进行互动,而API只是一个代理接口,由它做代理跟服务器沟通我没读过什么书,但记得初中的几何课上老师曾说过:两点之间的距离,直线最短
      

  5.   

    本人出售Outlook软件源代码 13062323245Dim LngCurFileSize As Long'********************************************************************************
    'CFtpConnection类
    '********************************************************************************
    '   在该类里面使用了以下几个类和模块
    '   CFtpFile    类
    '   CFtpFiles   类
    '   CTimeout    类
    '   MFtpSupport 模块
    '
    '   同时在该类中使用到了winsock对象,因此在工程的REFERENCES中加入对该对象的引用'********************************************************************************
    'winsock对象的声明
    '********************************************************************************
    '声明进行控制连接的winsock对象
    Private WithEvents wscControl As FrmWinsock
    '声明进行数据连接的winsock对象
    Private WithEvents wscData As FrmWinsock
    '********************************************************************************
    '定义类模块的内部属性变量
    '********************************************************************************
    Private m_strUserName           As String           '定义连接ftp服务器用户名
    Private m_strPassword           As String           '定义连接ftp服务器密码
    Private m_varFtpServer          As Variant          '定义连接ftp服务器地址
    Private m_strCurrentDirectory   As String           '服务器当前工作目录
    Private m_bPassiveMode          As Boolean          '定义连接模式
    Private m_bBusy                 As Boolean          '定义程序是否正在传输连接
    Private m_intTimeout            As Integer          '定义连接超时限制
    Private m_TransferMode          As FtpTransferModes '定义传输模式
    '********************************************************************************
    '公共枚举变量
    '********************************************************************************
    '连接ftp服务器时的各种状态
    Public Enum FTP_CONNECTION_STATES
        FTP_CONNECTION_RESOLVING_HOST
        FTP_CONNECTION_HOST_RESOLVED
        FTP_CONNECTION_CONNECTED
        FTP_CONNECTION_AUTHENTICATION
        FTP_USER_LOGGED
        FTP_ESTABLISHING_DATA_CONNECTION
        FTP_DATA_CONNECTION_ESTABLISHED
        FTP_RETRIEVING_DIRECTORY_INFO
        FTP_DIRECTORY_INFO_COMPLETED
        FTP_TRANSFER_STARTING
        FTP_TRANSFER_COMLETED
    End Enum
    'ftp服务器各种返回的响应码
    Private Enum FTP_RESPONSE_CODES
        FTP_RESPONSE_RESTATRT_MARKER_REPLY = 110
        FTP_RESPONSE_SERVICE_READY_IN_MINUTES = 120
        FTP_RESPONSE_DATA_CONNECTION_ALREADY_OPEN = 125
        FTP_RESPONSE_FILE_STATUS_OK = 150
        FTP_RESPONSE_COMMAND_OK = 200
        FTP_RESPONSE_COMMAND_NOT_IMPLEMENTED_SUPERFLUOUS_AT_THIS_SITE = 202 'superfluous at this site
        FTP_RESPONSE_SYSTEM_STATUS_OR_SYSTEM_HELP_REPLY = 211
        FTP_RESPONSE_DIRECTORY_STATUS = 212
        FTP_RESPONSE_FILE_STATUS = 213
        FTP_RESPONSE_HELP_MESSAGE = 214
        FTP_RESPONSE_NAME_SYSTEM_TYPE = 215
        FTP_RESPONSE_SERVICE_READY_FOR_NEW_USER = 220
        FTP_RESPONSE_SERVICE_CLOSING_CONTROL_CONNECTION = 221
        FTP_RESPONSE_DATA_CONNECTION_OPEN = 225
        FTP_RESPONSE_CLOSING_DATA_CONNECTION = 226
        FTP_RESPONSE_ENTERING_PASSIVE_MODE = 227
        FTP_RESPONSE_USER_LOGGED_IN = 230
        FTP_RESPONSE_REQUESTED_FILE_ACTION_OK_COMPLETED = 250
        FTP_RESPONSE_PATHNAME_CREATED = 257
        FTP_RESPONSE_USER_NAME_OK_NEED_PASSWORD = 331
        FTP_RESPONSE_NEED_ACCOUNT_FOR_LOGIN = 332
        FTP_RESPONSE_REQUESTED_FILE_ACTION_PENDING_FURTHER_INFO = 350
        FTP_RESPONSE_SERVICE_NOT_AVAILABLE_CLOSING_CONTROL_CONNECTION = 421
        FTP_RESPONSE_CANNOT_OPEN_DATA_CONNECTION = 425
        FTP_RESPONSE_CONNECTION_CLOSED_TRANSFER_ABORTED = 426
        FTP_RESPONSE_REQUESTED_FILE_ACTION_NOT_TAKEN = 450
        FTP_RESPONSE_REQUESTED_ACTION_ABORTED = 451
        FTP_RESPONSE_REQUESTED_ACTION_NOT_TAKEN = 452
        FTP_RESPONSE_SYNTAX_ERROR_COMMAND_UNRECOGNIZED = 500
        FTP_RESPONSE_SYNTAX_ERROR_IN_PARAMETERS_OR_ARGUMENTS = 501
        FTP_RESPONSE_COMMAND_NOT_IMPLEMENTED = 502
        FTP_RESPONSE_BAD_SEQUENCE_OF_COMMANDS = 503
        FTP_RESPONSE_COMMAND_NOT_IMPLEMENTED_FOR_THAT_PARAMETER = 504
        FTP_RESPONSE_NOT_LOGGED_IN = 530
        FTP_RESPONSE_NEED_ACCOUNT_FOR_STORING_FILES = 532
        FTP_RESPONSE_REQUESTED_ACTION_NOT_TAKEN_FILE_UNAVAILABLE = 550
        FTP_RESPONSE_REQUESTED_ACTION_ABORTED_PAGE_TYPE_UNKNOWN = 551
        FTP_RESPONSE_REQUESTED_FILE_ACTION_ABORTED_EXCEEDED_STORAGE_ALLOCATION = 552
        FTP_RESPONSE_REQUESTED_ACTION_NOT_TAKEN_FILE_NAME_NOT_ALLOWED = 553
    End Enum
    'ftp传输模式
    Public Enum FtpTransferModes
        FTP_ASCII_MODE 'ASCII模式
        FTP_IMAGE_MODE '二进制模式
    End Enum
    '********************************************************************************
    '类错误
    '********************************************************************************
    Public Enum FtpErrors
        ERROR_FTP_WINSOCK_AddressInUse
        ERROR_FTP_WINSOCK_AddressNotAvailable
        ERROR_FTP_WINSOCK_AlreadyComplete
        ERROR_FTP_WINSOCK_AlreadyConnected
        ERROR_FTP_WINSOCK_BadState
        ERROR_FTP_WINSOCK_ConnectAborted
        ERROR_FTP_WINSOCK_ConnectionRefused
        ERROR_FTP_WINSOCK_ConnectionReset
        ERROR_FTP_WINSOCK_GetNotSupported
        ERROR_FTP_WINSOCK_HostNotFound
        ERROR_FTP_WINSOCK_HostNotFoundTryAgain
        ERROR_FTP_WINSOCK_InProgress
        ERROR_FTP_WINSOCK_InvalidArg
        ERROR_FTP_WINSOCK_InvalidArgument
        ERROR_FTP_WINSOCK_InvalidOp
        ERROR_FTP_WINSOCK_InvalidPropertyValue
        ERROR_FTP_WINSOCK_MsgTooBig
        ERROR_FTP_WINSOCK_NetReset
        ERROR_FTP_WINSOCK_NetworkSubsystemFailed
        ERROR_FTP_WINSOCK_NetworkUnreachable
        ERROR_FTP_WINSOCK_NoBufferSpace
        ERROR_FTP_WINSOCK_NoData
        ERROR_FTP_WINSOCK_NonRecoverableError
        ERROR_FTP_WINSOCK_NotConnected
        ERROR_FTP_WINSOCK_NotInitialized
        ERROR_FTP_WINSOCK_NotSocket
        ERROR_FTP_WINSOCK_OpCanceled
        ERROR_FTP_WINSOCK_OutOfMemory
        ERROR_FTP_WINSOCK_OutOfRange
        ERROR_FTP_WINSOCK_PortNotSupported
        ERROR_FTP_WINSOCK_SetNotSupported
        ERROR_FTP_WINSOCK_SocketShutdown
        ERROR_FTP_WINSOCK_Success
        ERROR_FTP_WINSOCK_Timedout
        ERROR_FTP_WINSOCK_Unsupported
        ERROR_FTP_WINSOCK_WouldBlock
        ERROR_FTP_WINSOCK_WrongProtocol
        ERROR_FTP_PROTOCOL_SERVICE_READY_IN_MINUTES
        ERROR_FTP_PROTOCOL_USER_NAME_OK_NEED_PASSWORD
        ERROR_FTP_PROTOCOL_NEED_ACCOUNT_FOR_LOGIN
        ERROR_FTP_PROTOCOL_REQUESTED_FILE_ACTION_PENDING_FURTHER_INFO
        ERROR_FTP_PROTOCOL_SERVICE_NOT_AVAILABLE_CLOSING_CONTROL_CONNECTION
        ERROR_FTP_PROTOCOL_CANNOT_OPEN_DATA_CONNECTION
        ERROR_FTP_PROTOCOL_CONNECTION_CLOSED_TRANSFER_ABORTED
        ERROR_FTP_PROTOCOL_REQUESTED_FILE_ACTION_NOT_TAKEN
        ERROR_FTP_PROTOCOL_REQUESTED_ACTION_ABORTED
        ERROR_FTP_PROTOCOL_REQUESTED_ACTION_NOT_TAKEN
        ERROR_FTP_PROTOCOL_SYNTAX_ERROR_COMMAND_UNRECOGNIZED
        ERROR_FTP_PROTOCOL_SYNTAX_ERROR_IN_PARAMETERS_OR_ARGUMENTS
        ERROR_FTP_PROTOCOL_COMMAND_NOT_IMPLEMENTED
        ERROR_FTP_PROTOCOL_BAD_SEQUENCE_OF_COMMANDS
        ERROR_FTP_PROTOCOL_COMMAND_NOT_IMPLEMENTED_FOR_THAT_PARAMETER
        ERROR_FTP_PROTOCOL_NOT_LOGGED_IN
        ERROR_FTP_PROTOCOL_NEED_ACCOUNT_FOR_STORING_FILES
        ERROR_FTP_PROTOCOL_REQUESTED_ACTION_NOT_TAKEN_FILE_UNAVAILABLE
        ERROR_FTP_PROTOCOL_REQUESTED_ACTION_ABORTED_PAGE_TYPE_UNKNOWN
        ERROR_FTP_PROTOCOL_REQUESTED_FILE_ACTION_ABORTED_EXCEEDED_STORAGE_ALLOCATION
        ERROR_FTP_PROTOCOL_REQUESTED_ACTION_NOT_TAKEN_FILE_NAME_NOT_ALLOWED
        ERROR_FTP_USER_TIMEOUT
        ERROR_FTP_USER_TRANSFER_IN_PROGRESS
    End Enum'********************************************************************************
    '定义类事件
    '********************************************************************************
    Public Event StateChanged(State As FTP_CONNECTION_STATES)
    Public Event DownloadProgress(lBytes As Long, lGetBytes As Long)
    Public Event UploadProgress(lBytes As Long)
    Public Event ReplyMessage(ByVal sMessage As String)
    自己写吧,也不难
      

  6.   

    请大家给出邮件地址,本人将免费送一套Outlook主控代码.谢谢!
      

  7.   

    [email protected]
    谢先了,帅哥  呵呵!up
      

  8.   

    这是我一年前业余时间开发的一个界面和功能和OUTLOOK一样的软件,开放主控代码!运行效果图:
    http://www.efile.com.cn/efile/huangtao/SmartMail.bmp安装盘及其代码下载地址:
    http://www.cnkernel.com/opensoft.asp?soft_id=3&url=4本软件开始出售源代码已经给您们发送了
      

  9.   

    我使用过的ftp下载模块:
    '调用方式:
    'FtpGet "210.26.53.171", "www", "wwwwww", "210.26.53.171", "运行环境.txt", "c:"
    Option ExplicitPrivate Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean
    Private Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
    Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
    Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
    Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
    Private Declare Function InternetGetLastResponseInfo Lib "wininet.dll" Alias "InternetGetLastResponseInfoA" (lpdwError As Long, ByVal lpszBuffer As String, lpdwBufferLength As Long) As BooleanPrivate Const scUserAgent = "vb wininet"Private Const INTERNET_OPEN_TYPE_DIRECT = 1
    Private Const INTERNET_OPEN_TYPE_PROXY = 3
    Private Const INTERNET_INVALID_PORT_NUMBER = 0Private Const FTP_TRANSFER_TYPE_ASCII = &H1
    Private Const FTP_TRANSFER_TYPE_BINARY = &H1
    Private Const INTERNET_FLAG_PASSIVE = &H8000000
                    
    Private Const ERROR_INTERNET_EXTENDED_ERROR = 12003Private Const INTERNET_SERVICE_FTP = 1Private Const INTERNET_FLAG_RELOAD = &H80000000Private hOpen As Long, hConnection As LongPrivate Const txtProxy = ""
    Private Const chkPassive = 1'打开ftp连接
    Public Sub InternetOpening()
        If Len(txtProxy) <> 0 Then
            hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PROXY, txtProxy, vbNullString, 0)
        Else
            hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
        End If
        If hOpen = 0 Then ErrorOut Err.LastDllError, "InternetOpen"
    End Sub'关闭ftp连接
    Public Sub InternetClose()
        If hConnection <> 0 Then InternetCloseHandle hConnection
        If hOpen <> 0 Then InternetCloseHandle hOpen
        hConnection = 0
        hOpen = 0
    End Sub'建立ftp连接
    Public Function FtpConnect(ftpServer As String, ftpUser As String, ftpPass As String) As Boolean
        FtpConnect = False
        
        Call InternetOpening
        
        If hOpen <> 0 Then
            
            Dim nFlag As Long
            If chkPassive = 1 Then
                nFlag = INTERNET_FLAG_PASSIVE
            Else
                nFlag = 0
            End If
            hConnection = InternetConnect(hOpen, ftpServer, INTERNET_INVALID_PORT_NUMBER, ftpUser, ftpPass, INTERNET_SERVICE_FTP, nFlag, 0)
            If hConnection = 0 Then
    '            ErrorOut Err.LastDllError, "InternetConnect"
            Else
                FtpConnect = True
           End If
        End If
    End Function'获取ftp上的文件
    Public Function FTPGET(ByVal ftpServer As String, ByVal ftpUser As String, ByVal ftpPass As String, ByVal szDirRemote As String, ByVal szFileRemote As String, ByVal szDirLocal As String, Optional ByVal szFileLocal As String) As Boolean
        Dim bRet As Boolean
        
        FTPGET = False
        
        Call FtpConnect(ftpServer, ftpUser, ftpPass)
        
        rcd szDirRemote, ftpServer
        If szFileLocal = "" Then
            '如果未传递本地文件名,则默认为远程文件名
            szFileLocal = szFileRemote
        Else
            '可以检测后缀名是否一致
        End If
        bRet = FtpGetFile(hConnection, szFileRemote, szDirLocal & szFileLocal, False, INTERNET_FLAG_RELOAD, FTP_TRANSFER_TYPE_BINARY, 0)
            
        DoEvents
        Call InternetClose    If bRet = False Then
            ErrorOut Err.LastDllError, "FtpGetFile"
        Else
            FTPGET = True
        End If
    End Function'获取ftp错误信息
    Public Sub rcd(pszDir As String, ftpServer As String)
        Dim sPathFromRoot As String
        Dim bRet As Boolean
        
        If InStr(1, pszDir, ftpServer) Then
            sPathFromRoot = Mid(pszDir, Len(ftpServer) + 1, Len(pszDir) - Len(ftpServer))
        Else
            sPathFromRoot = pszDir
        End If
        If sPathFromRoot = "" Then sPathFromRoot = "/"
        
        bRet = FtpSetCurrentDirectory(hConnection, sPathFromRoot)
        
    '    If bRet = False Then ErrorOut Err.LastDllError, "rcd"
    End Sub'显示ftp错误
    Public Function ErrorOut(dError As Long, szCallFunction As String)
        Dim dwIntError As Long, dwLength As Long
        Dim strBuffer As String
        
        If dError = ERROR_INTERNET_EXTENDED_ERROR Then
            InternetGetLastResponseInfo dwIntError, vbNullString, dwLength
            strBuffer = String(dwLength + 1, 0)
            InternetGetLastResponseInfo dwIntError, strBuffer, dwLength
            
            MsgBox szCallFunction & " Extd Err: " & dwIntError & " " & strBuffer
            
        End If
        If MsgBox(szCallFunction & " Err: " & dError & _
            vbCrLf & "要关闭ftp连接吗?", vbQuestion + vbYesNo) = vbYes Then
            If hConnection Then InternetCloseHandle hConnection
            
            If hOpen Then InternetCloseHandle hOpen
            
            hConnection = 0
            hOpen = 0
        End If
    End Function
      

  10.   

    给大家发了演示程序,最新代码还没有整理出来,到时一定发给大家.
    Smart网站将再最近开通,届时请大家捧场阿!!!该网站将提供详细的代码下载!
      

  11.   

    我要,,我要[email protected]
      

  12.   

    请大家到一下地址下载:
    http://free.efile.com.cn/huangtao/ScreenShot.jpg代码及安装盘:
    http://free.efile.com.cn/huangtao/SmartmailSourceSetup.EXE用了后可要为我作宣传阿!
      

  13.   

    用winsock开发比较好,比较稳定,也简单些
      

  14.   


    用VB创建FTP组件(get)
    (www.Jojoo.net)  2001-11-23 (请双击自动滚屏观看,单击停止,再击..)
    基本步骤: 1、用一个InternetOpen调用设置环境。 2、调用InternetConnect 函数与主机连接。 3、调用FtpGetFile 达到文件。 4、关闭第1、2步创建的句柄,用InternetCloseHandle 函数。 现在来仔细看看每一步: 1、通过调用InternetOpen 函数设置环境。下面是VB特定调用这一函数的声明: 
    Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _   (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _   ByVal sProxyBypass As String, ByVal lFlags As Long) As Long 
      参数sAgent 用来指定调用WinINet 函数的应用程序或实体。为了达到目的,可以设置FTP控制。 
      参数lAccessType 指定我们是直接与某一主机相连还是使用代理服务器相连。如果传递值1,就直接与主机连接。如果传递3,就通过代理服务器。如果传递0,连接时就要基于 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings下的注册表数值 ProxyEnable、ProxyServer和 ProxyOverride 。 
      我们可以使用参数sProxyName和 sProxyBypass,而不是注册设置来提供代理服务器和不使用代理服务器的IP地址和名字。列出代理的基本格式是rotocol=protocol://proxy_name:access_port?。例如,要指定Proxy1 上的端口21为代理服务器,用Ftp=ftp://Proxy1:21?作为sProxyName。要饶过以ov? 开始的任何主机,sProxyBypass 字符串应为ov*? 。 
      最后,lFlags 用来显示影响函数结果的不同选择。在我们的例子中,我们传递0。   所以,不使用代理而打开一个Internet session 时,我们的调用是这样的: lngINet = InternetOpen(“FTP Control”, 1, vbNullString, vbNullString, 0)   如果函数调用失败,lngINet 为0。不然,lngINet 就保存在下一步中将要传递给InternetConnect 函数的句柄的值。 2、通过调用InternetConnect 函数与主机连接。VB特定调用这一函数的声明是: Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _   (ByVal hInternetSession As Long, ByVal sServerName As String, _   ByVal nServerPort As Integer, ByVal sUsername As String, _   ByVal sPassword As String, ByVal lService As Long, _   ByVal lFlags As Long, ByVal lContext As Long) As Long 
      第一个参数hInternetSession 是InternetOpen 调用返回的句柄值。   sServerName 是我们即将连接的FTP服务器的IP地址或主机名。   nServerPort 指示与哪一个端口连接。在我们的例子中使用的值为0,它指示的是默认的端口21。   sUsername 和 sPassword 分别传递用户名和口令。   lService 用来指示使用的服务类型,如HTTP, FTP等。通常传递值为1,表示FTP服务。   如果将x8000000传递到 lFlags 参数,连接将使用被动FTP语义。或者,在我们的例子中,传递0来使用非被动语义。 
      最后,当使用回叫信号时,lContext 用来识别应用程序的前后关系。因为在我们的例子中不使用回叫信号,所以这个值为0。 
      现在使用匿名的电子邮件用户名与主机FTP.MICROSOFT.COM 相连接: lngINetConn = InternetConnect(lngINet, “ftp.microsoft.com”, 0, _   “anonymous”,”[email protected]”, 1, 0, 0) 
      如果函数调用失败,则lngINetConn 为0。反之,lngINetConn 就保存在下一步中将传递给FtpGetFile 的句柄的值。 
    3、现在我们已经实现了连接,然后就需要调用FtpGetFile 。这个函数完成从一个FTP服务器上读取文件并在本地存储时有关的所有管理功能。VB特定调用这一函数的声明是: 
    Private Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _   (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _   ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _   ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _   ByVal dwContext As Long) As Boolean 
      第一个参数hFtpSession 是InternetConnect 调用返回的句柄值。   lpszRemoteFile和lpszNewFile 分别是FTP服务器上的文件名和将在本地机上创建的文件名。   fFailIfExists 标志是0(替换本地文件)或1 (如果本地文件已经存在则取消)。   dwFlagsAndAttributes 用来指定本地文件的文件属性。在我们的例子中忽略,只传递0。   dwFlags 参数指定为1是用ASCII 传输文件(A类传输方法),指定为2是用二进制传输文件(1类传输方法)。由于DIRMAP.TXT 是ASCII 文本文件,我们传递值1。   最后,当使用回叫信号时,lContext 用来识别应用程序前后关系。因为在我们的例子中不使用回叫信号,所以这个值为0。   所以,以下是得到DIRMAP.TXT文件并将其存在 C:\DIRMAP.TXT的调用。如果本地文件已经存在,就覆盖它。 blnRC = FtpGetFile(lngINetConn, “dirmap.txt”,”c:\dirmap.txt”, 0, 0, 1, 0)   如果函数调用成功,blnRC为 True, 反之为False。 4、现在文件已经被接收,使用InternetCloseHandle 调用来关闭连接和session 句柄。VB特定调用这一函数的声明是: 
    Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer. 
      如同指明的一样,此函数只有一个参数hInet,是要关闭或抛弃的句柄的值。因为InternetConnection 和InternetOpen 中有句柄,就需要调用这个关闭函数两次。另外因为InternetConnection 句柄是由InternetOpen 句柄决定的,关闭他们时的顺序与创建时相反。   以下是调用函数: InternetCloseHandle lngINetConn InternetCloseHandle lngINet 
      用这短短的四步就完成了FTP GET。
      

  15.   

    用VB创建FTP组件(put)
    (www.Jojoo.net)  2001-11-23 (请双击自动滚屏观看,单击停止,再击..)
    基本步骤是: 
    1、调用InternetOpen函数设置环境。 2、调用InternetConnect 函数连接主机。 3、调用FtpPutFile 函数得到文件。 4、用InternetCloseHandle 函数关闭第1、2步的句柄。 
      当使用FtpGetFile 时与上面的步骤看起来完全一样。事实上唯一的区别是在第3步中调用了FtpPutFile 。VB特定调用这一函数的声明是: 
    Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _   (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _   ByVal lpszRemoteFile As String, ByVal dwFlags As Long, _   ByVal dwContext As Long) As Boolean 
      第一个参数hFtpSession 是InternetConnect 调用返回的句柄值。   lpszNewFile 和lpszRemoteFile 分别是本地机上的文件名和将在远程主机上创建的文件名。   参数dwFlags 指定为1时,用ASCII 传输文件(A类传输方法),指定为2是用二进制传输文件(1类传输方法)。由于DIRMAP.TXT 是ASCII 文本文件,我们传递值1。   最后,当使用回叫信号时,lContext 用来识别应用程序前后关系。因为在我们的例子中不使用回叫信号,所以这个值为0。   以下是得到DIRMAP.TXT文件并将其存在 C:\DIRMAP.TXT的调用。 blnRC = FtpPutFile(lngINetConn, “c::\dirmap.txt”, “dirmap.txt”, 1, 0)   如果函数调用成功,blnRC为 True, 反之为False。   你可以看到,把文件放到FTP服务器上与从FTP服务器上得到文件一样简单。有一点要注意,匿名用户无权在FTP服务器上创建文件。所以要确定用来与FTP服务器连接的用户帐号要有创建文件的权限。不然的话,FtpPutFile函数调用就会返回False,说明Put 失败了。 
      

  16.   

    http://www.vbip.com/wininet/wininet-ftp-command-01.asp
      

  17.   

    HTTP://www.smartsoftcn.com
    上将开放OUTLOOK等VB源码,请大家多多支持!正在放当中。