分享
 
 
 

用VB创建FTP组件(get)

王朝vb·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

基本步骤:

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”,”ally@wallyworld.com”, 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。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有