利用Indy的TIdFtp控件实现FTP协议

现在很多应用都需要上传与下载大型文件,通过HTTP方式上传大文件有一定的局限性。幸好FTP作为一个非常老而且非常成熟的协议可以高效稳定地完成大文件的上传下载,并且可以完美地实现续传。就拿我写的电影服务器管理端程序来说,各种方案比较后,发现使用FTP可以完美地实现要求。但是要通过WinSocket库实现FTP比较麻烦,幸好有Indy--一个包装了大多数网络协议的组件包。

通过Indy,程序设计人员可以通过阻塞方式进行编程,可以抛开蹩脚的Winsocket异步模式,采用与Unix系统上等同的阻塞编程模式进行。这样,程序员就可以很好的处理程序的运行流程。 下面,我们进入到Indy的TIdFtp世界。

1.控件的说明

使用Indy 9中的TIdFtp控件可以实现通过FTP方式进行文件的上传与下载。

2.控件的具体使用

(1)控件属性设置

默认属性即可,与服务器连接直接相关的属性如主机名与用户等在建立连接时进行设定。需要设定的是RecvBufferSize和SendBufferSize两属性的值。另外需要根据要传输的文件类型指定TransferType属性,而其他属性按默认值设定即可。

RecvBufferSize说明(默认值为8192字节):该属性为整型变量,用于指定连接所用的接受缓冲区大小。

SendBufferSize说明(默认值为32768字节):该属性也为整型变量,用于指定连接所用的发送缓冲区的最大值。该属性在WriteStream方法中时,可用于TStream指定要发送内容的块数。如果要发送的内容大于本属性值,则发送内容被分为多个块发送。

TransferType说明(默认值为ftBinary):该属性为TIdFTPTransferType型变量。用于指定传输内容是二进制文件(ftBinary )还是ASCII文件(ftASCII)。应用程序需要使用二进制方式传输可执行文件、压缩文件和多媒体文件等;而使用ASCII方式传输文本或超文本等文本型数据。

(2)控件的事件响应

OnDisconnected响应:TNotifyEvent类,用于响应断开(disconnect)事件。当Disconnect方法被调用用来关闭Socket的时候,触发该响应。应用程序必须指定该事件响应的过程,以便对该断开事件进行相应。

OnStatus响应:TIdStatusEvent类。该响应在当前连接的状态变化时被触发。该事件可由DoStatus方法触发并提供给事件控制器属性。axStatus是当前连接的TIdStatus值;aaArgs是一个可选的参数用于格式化函数,它将用于构造表现当前连接状态的文本消息。

OnWork响应:OnWord是TWorkEvent类事件的响应控制器。OnWork用于关联DoWork方法当缓冲区读写操作被调用时通知Indy组件和类。它一般被用于控制进度条和视窗元素的更新。AWorkMode表示当前操作的模式,其中:wmRead-组件正在读取数据;wmWrite-组件正在发送数据。AWorkCount指示当前操作的字节计数。

OnWorkBegin响应:TWorkBeginEvent类。当缓冲区读写操作初始化时,该事件关联BeginWork方法用于通知Indy组件和类。它一般被用于控制进度条和视窗元素的更新。AWorkMode表示当前操作的模式,其中:wmRead-组件正在读取数据;wmWrite-组件正在发送数据。AWorkCountMax用于指示发送到OnWorkBegin事件的操作的最大字节数,0值代表未知。

OnWorkEnd响应:TWorkEndEvent类。当缓冲区读写操作终止时,该事件关联EndWork方法用于通知Indy组件和类。AWorkMode表示当前操作的模式,其中:wmRead-组件正在读取数据;wmWrite-组件正在发送数据。AWorkCount表示操作的字节数。

在事件响应中,主要通过上述五种事件响应来控制程序。在一般情况下,在OnDisconnected中设定连接断开的界面通知;在OnStatus中设定当前操作的状态;在OnWork中实现传输中状态条和其他参数的显示;而在OnWorkBegin和OnWorkEnd中分别设定开始传输和传输结束时的界面。

时间: 2024-11-10 01:02:39

利用Indy的TIdFtp控件实现FTP协议的相关文章

数据-VB利用句柄操作MSHFlexgrid控件

问题描述 VB利用句柄操作MSHFlexgrid控件 一个软件有MSHFlexgrid控件,可以获得MSHFlexgrid控件句柄.但怎样才能向MSHFlexgrid控件(1.1)单元格输入数据.用VB的 解决方案 利用句柄找到这个控件对象,强制转换为相应的类型.然后就可以按正常属性进行操作 解决方案二: 有具体实现代码吗?恳请指教下,谢谢.

vc++6 0-用vc++6.0 利用windows media player控件制作播放器时

问题描述 用vc++6.0 利用windows media player控件制作播放器时 在win7 64位环境下 要对 播放器进行暂停 快进等操作时 调用 CWMPcontrols 函数时 显示 'CWMPcontrols.h': No such file or directory 头文件 也加了 cwmpcontrols.h 头文件换成小写也是不行的 也说不能打开 没有这个文件 cwmpcontrols.h 头文件是存在的在工程目录下: 解决方案 你的VC++版本太旧,没有这个头文件.建议你

利用SilverLight 遍历父子控件通用方法

利用silverlight 遍历父子控件通用方法 silverlight中datagrid找元素,真是麻烦,没有rows对象,无法遍历.从网上找来这些方法,挺好用的: public class vthelper() {         public t getparentobject<t>(dependencyobject obj, string name) where t : frameworkelement         {             dependencyobject pa

利用FarPoint Spread表格控件,构造Winform的Excel表格界面输入

因有一个业务需要在Winform界面中,以类似Excel表格界面中录入相关的数据(毕竟很多时候,客户想利用成熟的软件体验来输入他们想要的东西),其中界面需要录入基础信息,列表信息,图片信息等,综合这些就是例如下面这样的界面效果.本文主要针对如何利用FarPoint Spread表格控件实现类似Excel界面丰富数据的保存及显示,以及在使用过程中的一些经验心得,希望对大家在开发Winform的Excel数据录入和显示方面的开发有一定帮助. 从以上的界面分类可以看到,大致可以分为几个类型的数据,一个

在 Swift 3 上对视图控件实践面向协议编程

本文讲的是在 Swift 3 上对视图控件实践面向协议编程, 学习如何对 button, label, imageView 创建动画而不制造一串乱七八糟的类 你可能听人说过,学到了知识却缺失了行动就好比人长了牙却还老盯着奶喝一样.那好,我们要怎样开始在我的应用中实践面向协议编程? 为了能更加高效的理解下面的内容,我希望读者能够明白 Complection Handlers,并且能创建协议的基本实现.如果你还不熟悉他们,可以先查看下面的文章和视频再回来接着看: 前景提要: Intro to Pro

利用.NET的File控件上传文件的最终解决方案(个人版)

个人版|解决|控件|上传    在遍历了csdn中所有关于上传大文件的帖子以后,写了这片垃圾.(:-))   上传大文件,有好几种方法:   1.思归的HttpWorkerRequest方法,太难,看不懂:-(   2.利用第三方的控件 AspNetUpload 要钱!!算了,咱还是喜欢免费的.   3.修改web.config文件,但是不能捕获错误.   4.通过ftp的方式上传.服务器需要提供ftp服务.      没辙,只好选第三种方式,谁让咱太蠢了呢!(太蠢了,没有关系,要多吃鱼,听说吃

利用.NET的File控件上传文件的最终解决方案

解决|控件|上传 在遍历了csdn中所有关于上传大文件的帖子以后,写了这片垃圾.(:-))上传大文件,有好几种方法:1.思归的HttpWorkerRequest方法,太难,看不懂:-(2.利用第三方的控件 AspNetUpload 要钱!!算了,咱还是喜欢免费的.3.修改web.config文件,但是不能捕获错误.4.通过ftp的方式上传.服务器需要提供ftp服务. 没辙,只好选第三种方式,谁让咱太蠢了呢!(太蠢了,没有关系,要多吃鱼,听说吃鱼能聪明点.) 那就仔细专研第三种方式吧! 修改Web

利用ASP.NET日期控件制作“会议日程安排”

大家应该比较熟悉outlook里的日程安排,点进去就是一个日历版面,选择某日即可添加当天的日程安排,还有偶尔玩下开心网的兄弟们应该也知道有个日程组件,其实和outlook有点兄弟关系,只不过比outlook做的要漂亮些:) 从VS03到VS08里,ASP.NET一直带有个Calendar日历控件,我不知道历经三代岁月沧桑的交替,这个控件发生了多少变化,不是很清楚,因为从来就没在项目中用过,最近的一个项目倒是提到了这方面的需求,要求用户登录点"会议日程"能显示当前月的日期和相应具体日期有

利用委托把用户控件的值显示于网页案例应用_实用技巧

Asp.net开发要求,就是用户控件(UserControl)是集成一个功能,需要处理好的数据,然后存数据库中并显示于网页上,让用户能检测到处理的数据情况. 本演示中,Insus.NET只是作了一个简单的举例而已,并应用了委托来实现.为了让大家更能理解,可以先看看操作动画演示:在你新建一站点上,创建一个PageB.aspx网页以及UcB.ascx用户控件,在UcB.ascx上拉一个TextBox和CheckBox以及Button控件: 复制代码 代码如下: UcB.ascx <%@ Contro