ftp传输:在PB中实现ftp传输

---- 在用PB进行开发时常常需要用到ftp功能最典型应用就是将数据窗口中数据生成txt文件然后将此数据文件用ftp发送到远程服务器上去由于pb本身并未提供任何ftp功能因此想在pb中进行ftp传输只能应用pb以外资源以下是笔者在pb开发中整理总结出来几种思路方法

---- 1. 使用外部命令

---- 这种思路方法就是在pb中运行Windows中自带ftp命令具体做法是在中生成个.bat文件将要运行ftp命令写到此文件中再运行这个批处理文件假设ftp服务器ip为 202.114.67.2用户名为user口令12345现在要将本地c:\temp\下t00001.txt文件上传到服务器\txtdata\目录下去则pb代码如下:

eger li_bat  //文件名指针
li_bat = FileOpen(path_ftp+'get_file.bat',
lineMode!, Write!, LockWrite!, Replace!)

FileWrite(li_bat, 'cd c:\temp\')
FileWrite(li_bat, 'ftp 202.114.67.2')
FileWrite(li_bat, 'user)
FileWrite(li_bat, '12345')
FileWrite(li_bat, 'put t00001.txt
\txtdata\t00001.txt')
FileWrite(li_bat, 'bye')
FileWrite(li_bat, 'exit')
FileClose(li_bat)
Run(path_ftp+'get_file.BAT',Minimized!)
messagebox("提示信息","数据上报完毕")

---- 此思路方法优点是简单易行既不要API也不需加入OLE缺点是要运行外部命令将会打开dos窗口显得不够和谐; 2是数据传输成功和否无法判断在编程时不好控制

---- 2. 使用Internet TransferControl控件

---- Internet TransferControl控件是网络编程中非常常用Control控件它支持目前Internet上使用最为广泛两种协议即Http和Ftp在windows98中它是由系统自带有关此Control控件详细资料请查看相关书籍这里我们只使用它Ftp功能在PB中加入个和此Control控件OLE取名ole_1并按以下数据设置此Control控件属性(注意不是ole_1属性)表中没有列出属性请用缺省值:

属性            值           介绍说明
Protocol        2          指定用Ftp协议
Remotehost      202.114.67.2
Username        User1
Password        12345

---- Internet TransferControl控件支持两种数据传输方式即同步传输方式和异步传输方式同步传输方式在数据传输时会阻塞此功能是通过该Control控件OpenUrl思路方法来实现;而异步方式则不会阻塞它通过Control控件Execute思路方法来实现同步方式虽然易于控制但它只能下载文件不能上传文件这使得它在实际应用受到限制要实现数据上传下载只能使用此Control控件异步传输方式要完成上例中功能在PB中加入以下语句即可:

Ole_1.object.execute("","put c:
\temp\t00001.txt   \txtdata\t00001.txt")

---- 同理如果要将服务器上文件下载到本地中加入即下语句:

Ole_1. object.execute("","get \txtdata\t00001.txt  c:\temp\t00001.txt")

---- Internet TransferControl控件功能很强大利用它足以制作个功能比较完善FTP工具而且它是操作系统自带在编程时不需要注册新Control控件但根据笔者使用经验此Control控件也有两个不能忽视缺点、它数据上传下载是异步传输在每次只运行个ftp命令时尚可如果次运行多个ftp命令就会出错比如说我们想先进入服务器\file目录再上传数据这样应如下:

Ole_1.object.execute("","cd \file\")
Ole_1.object.execute("","put
c:\temp\t00001.txt   \txtdata\t00001.txt")
---- 由于execute思路方法是异步执行它不等第个语句完成就开始执行第 2条语句这样可能服务器还来不及将当前目录转到\file下数据已经开始上传造成

---- 其 2、笔者还发现个莫名其妙问题那就是利用此Control控件进行上传时它会将上传到服务器上文件文件名改为大写如上例中本地t00001.txt上传到服务器上后名字会变成T00001.TXT这在NT上自然无妨但在Unix机器上就可能带来

---- 3. 使用Mabry Internet FTP/X Control

---- 此Control控件是由Mabry Software公司提供个用于FtpControl控件读者可以到www.mabry.com上去下载此Control控件(mftpx.ocx)经比较笔者认为在进行ftp传输方面使用此Control控件进行编程最方便它能完成绝大部分Ftp功能而且在编程中能很方便地控制运行比如说要完成前述功能我们先注册该Control控件然后在PB中加入个该Control控件Ole取名Ole_1;个单行编辑器Sle_1用为显示有关信息;个按钮Cb_1点击它时进行Ftp操作另设个boolean 型Instance Variables取名is_con并将它设为false用于指示网络是否已连通对该Control控件属性进行如下设置:

属性            值               介绍说明
Host            202.114.67.2
Logonname       User
Logonpassword   12345
Timeout         10               根据实际情况设置

---- 在Cb_1clicked事件中加入以下代码:

sle_1.text = "正在连接....."
poer(hourglass!)
ole_1.object.connect

is_con then
sle_1.text = "开始传输...."
ole_1.object.putfile
("c:\temp\t00001.txt","/txtdata/t00001.txt")
sle_1.text = "传输完毕!"
end

poer(arrow!)
is_con = false
在Ole_1各事件中加入相应代码:
connected事件:
fconnected then
sle_1.text = "连接成功!"
is_con = true

sle_1.text = "连接失败!"
is_con = false
end
externalexception事件:
sle_1.text = "外部,可能网络不通"

action = ExceptionIgnore!
progress事件:
sle_1.text = "已传输"
+ (stransfered)+"字节....."

 

---- 此Control控件其它和属性请在PBBrowser画板中查看此处不再详述
---- 上述在以下系统中试验通过:
---- 服务器 Digital Unix
---- 开发工具 Pwin98 + Powerbuilder6.5
Tags:  ftp传输速度 ftp传输失败 ftp文件传输 ftp传输

延伸阅读

最新评论

发表评论