设为首页 收藏本站
查看: 954|回复: 0

[经验分享] 在PB中实现ftp传输

[复制链接]

尚未签到

发表于 2016-6-9 08:10:44 | 显示全部楼层 |阅读模式
在PB中实现ftp传输
(深圳:独孤求败2003-05-20)

在用PB进行开发时常常需要用到ftp功能,最典型的应用就是将数据窗口中的数据生成txt文件,然后将此数据文件用ftp发送到远程服务器上去。由于pb本身并未提供任何ftp的功能,因此想在pb中进行ftp传输,只能应用pb以外的资源。以下是笔者在pb开发中总结出来的几种方法。
一、使用外部命令
---这种方法就是在pb程序中运行Windows中自带的ftp命令。具体做法是在程序中生成一个.bat文件,将要运行的ftp命令写到此文件中,再运行这个批处理文件。假设ftp服务器ip为202.114.67.2,用户名为user,口令12345,现在要将本地c:\temp\下的t00001.txt文件上传到服务器的\txtdata\目录下去。则pb代码如下:
integerli_bat//文件名指针
li_bat=FileOpen(path_ftp+'get_file.bat',lineMode!,Write!,LockWrite!,Replace!)
FileWrite(li_bat,'cdc:\temp\')
FileWrite(li_bat,'ftp202.114.67.2')
FileWrite(li_bat,'user)
FileWrite(li_bat,'12345')
FileWrite(li_bat,'putt00001.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窗口,显得不够和谐;二是数据传输成功与否无法判断,在编程时不好控制。
二、使用InternetTransfer控件
---InternetTransfer控件是网络编程中非常常用的控件。它支持目前Internet上使用最为广泛的两种协议,即Http和Ftp。在windows98中它是由系统自带。有关此控件的详细资料请查看相关书籍。这里我们只使用它的Ftp功能。在PB中加入一个与此控件的OLE,取名ole_1,并按以下数据设置此控件的属性(注意不是ole_1的属性),表中没有列出的属性请用缺省值:
属性值说明
Protocol2指定用Ftp协议
Remotehost202.114.67.2
UsernameUser1
Password12345

---InternetTransfer控件支持两种数据传输方式,即同步传输方式和异步传输方式。同步传输方式在数据传输时会阻塞程序,此功能是通过调用该控件的OpenUrl方法来实现的;而异步方式则不会阻塞程序,它通过调用控件的Execute方法来实现。同步方式虽然易于控制,但它只能下载文件,不能上传文件,这使得它在实际的应用受到限制。要实现数据的上传下载,只能使用此控件的异步传输方式。要完成上例中的功能,在PB程序中加入以下语句即可:
Ole_1.object.execute("","putc:\temp\t00001.txt\txtdata\t00001.txt")

---同理,如果要将服务器上的文件下载到本地,在程序中加入即下语句:
Ole_1.object.execute("","get\txtdata\t00001.txtc:\temp\t00001.txt")


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


---由于execute方法是异步执行的,它不等第一个语句完成就开始执行第二条语句,这样可能服务器还来不及将当前目录转到\file下数据已经开始上传,造成错误。
---其二、笔者还发现一个莫名其妙的问题,那就是利用此控件进行上传时它会将上传到服务器上的文件的文件名改为大写,如上例中,本地的t00001.txt上传到服务器上后,它的名字会变成T00001.TXT,这在NT上自然无妨,但在Unix机器上就可能带来错误。

三、使用MabryInternetFTP/XControl
---此控件是由MabrySoftware公司提供的一个用于Ftp的控件,读者可以 www.mabry.com上去下载此控件(mftpx.ocx)。经比较,笔者认为在进行ftp传输方面,使用此控件进行编程最方便。它能完成绝大部分Ftp的功能,而且在编程中能很方便地控制程序的运行。比如说要完成前述功能,我们先注册该控件,然后在PB程序中加入一个该控件的Ole,取名Ole_1;一个单行编辑器Sle_1,用为显示有关信息;一个按钮Cb_1,点击它时进行Ftp操作。另设一个boolean型InstanceVariables,取名is_con,并将它设为false,用于指示网络是否已连通。对该控件的属性进行如下设置:
属性值说明
Host202.114.67.2
LogonnameUser
Logonpassword12345
Timeout10根据实际情况设置

----在Cb_1的clicked事件中加入以下代码:
sle_1.text="正在连接....."
setpointer(hourglass!)
ole_1.object.connect()

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

setpointer(arrow!)
is_con=false
在Ole_1的各事件中加入相应代码:
connected事件:
iffconnectedthen
sle_1.text="连接成功!"
is_con=true
else
sle_1.text="连接失败!"
is_con=false
endif
externalexception事件:
sle_1.text="外部错误,可能网络不通"

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


----此控件其它函数和属性请在PB的Browser画板中查看,此处不再详述。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-228018-1-1.html 上篇帖子: ftp服务器vsftp配置说明 下篇帖子: ftp服务器配置测试步骤
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表