C++ Builder平台使用Indy9开发自动FTP程序01

Indy9与CB自带的Indy8不同处还是挺多的。首先就是图标变漂亮了,其次很多Method都重写了。它主要是依据Delph里的函数,力求与之相通。不同点在本系列的后续章节中会一一介绍。

在写ftp代码之前,非常有必要了解下FTP网络相关知识。再次借用下Binny的博文:

在使用FTP时,如果客户端机器和FTP服务器双方之间的所有端口都是开放的,那连接不存在问题。如果客户端与服务器之间有防火墙,如果没配置好防火策略和采用合适的连接模式,会导致登录成功,但无法List列表的问题。要避免出现这样的问题,首先要了解FTP的工作模式。

1.FTP的PORT(主动模式)和PASV(被动模式)

(1) PORT(主动模式)

PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:

(2) PASV(被动模式)

PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

在使用

IdFTP1->Connect()

连接FTP的时候最好先弄清楚FTP的模式是主动还是被动。 在代码中体现为

IdFTP1->Passive

但是由于ftp服务器的多样性,经常会出现各种各样的socket error。 在此附上错误全集

Socket error 0 - Directly send error 
Socket error 10004 - Interrupted function call 
Socket error 10013 - Permission denied 
Socket error 10014 - Bad address 
Socket error 10022 - Invalid argument 
Socket error 10024 - Too many open files 
Socket error 10035 - Resource temporarily unavailable 
Socket error 10036 - Operation now in progress 
Socket error 10037 - Operation already in progress 
Socket error 10038 - Socket operation on non-socket 
Socket error 10039 - Destination address required 
Socket error 10040 - Message too long 
Socket error 10041 - Protocol wrong type for socket 
Socket error 10042 - Bad protocol option 
Socket error 10043 - Protocol not supported 
Socket error 10044 - Socket type not supported 
Socket error 10045 - Operation not supported 
Socket error 10046 - Protocol family not supported 
Socket error 10047 - Address family not supported by protocol family 
Socket error 10048 - Address already in use 
Socket error 10049 - Cannot assign requested address 
Socket error 10050 - Network is down 
Socket error 10051 - Network is unreachable 
Socket error 10052 - Network dropped connection on reset 
Socket error 10053 - Software caused connection abort 
Socket error 10054 - Connection reset by peer 
Socket error 10055 - No buffer space available 
Socket error 10056 - Socket is already connected 
Socket error 10057 - Socket is not connected 
Socket error 10058 - Cannot send after socket shutdown 
Socket error 10060 - Connection timed out 
Socket error 10061 - Connection refused 
Socket error 10064 - Host is down 
Socket error 10065 - No route to host 
Socket error 10067 - Too many processes 
Socket error 10091 - Network subsystem is unavailable 
Socket error 10092 - WINSOCK.DLL version out of range 
Socket error 10093 - Successful WSAStartup not yet performed 
Socket error 10094 - Graceful shutdown in progress 
Socket error 11001 - Host not found 
Socket error 11002 - Non-authoritative host not found 
Socket error 11003 - This is a non-recoverable error 
Socket error 11004 - Valid name, no data record of requested type

WSAEADDRINUSE (10048) Address already in use 
WSAECONNABORTED (10053) Software caused connection abort 
WSAECONNREFUSED (10061) Connection refused 
WSAECONNRESET (10054) Connection reset by peer 
WSAEDESTADDRREQ (10039) Destination address required 
WSAEHOSTUNREACH (10065) No route to host 
WSAEMFILE (10024) Too many open files 
WSAENETDOWN (10050) Network is down 
WSAENETRESET (10052) Network dropped connection 
WSAENOBUFS (10055) No buffer space available 
WSAENETUNREACH (10051) Network is unreachable 
WSAETIMEDOUT (10060) Connection timed out 
WSAHOST_NOT_FOUND (11001) Host not found 
WSASYSNOTREADY (10091) Network sub-system is unavailable 
WSANOTINITIALISED (10093) WSAStartup() not performed 
WSANO_DATA (11004) Valid name, no data of that type 
WSANO_RECOVERY (11003) Non-recoverable query error 
WSATRY_AGAIN (11002) Non-authoritative host found 
WSAVERNOTSUPPORTED (10092) Wrong WinSock DLL version

此外,还会出现的问题,是“Project ftp01.exe raised exception class EIdConnClosedGracefully with message‘Connection Closed Gracefully.‘.Process stopped.Use Step or Run continue.”  这是由服务器端发起的断开请求。此问题是因为网络未识别其协议导致的,它其实就是一个类似VCL的异常处理,可以在编译生成exe后消除。可以避免的方法是:在CB tools 选项中Debugger Options -> Language Exceptions添加一个条例(EIdSilentException)

时间: 2024-10-01 07:14:10

C++ Builder平台使用Indy9开发自动FTP程序01的相关文章

SNF开发平台WinForm之八-自动升级程序部署使用说明-SNF快速开发平台3.3-Spring.Net.Framework

9.1运行效果: 9.2开发实现: 1.首先配置服务器端,把“SNFAutoUpdate2.0\服务器端部署“目录按网站程序进行发布到IIS服务器上. 2.粘贴语句,生成程序 需要调用的应用程序的Load事件或者Program入口的Main方法第一行代码加上如下代码: 注意:是主程序的 Load事件要加上调整自动更新程序的代码.要以模式打开窗口.如果没有差异会自动关闭升级窗口显示主窗口. 3.把下面目录里的文件拷贝到 应用程序的同级目录下: 4.配置WINFORMS应用程序目录下Updateli

基于 Koa平台Node.js开发的KoaHub.js的控制器,模型,帮助方法自动加载

koahub-loader koahub-loader是基于 Koa平台Node.js开发的KoaHub.js的koahub-loader控制器,模型,帮助方法自动加载 koahub loader Installation $ npm install koahub-loader Use with koa // 1.model loader var model = loader([ {      root: './app/model',      suffix: '.model.js' }, { 

用VS2013+VELT-0.1.4进行海思平台 UBOOT 的开发

快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 本文仅适用于vs2013 + velt-0.1.4 1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序

Python开发程序:支持多用户在线的FTP程序

作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp server上随意切换目录 允许用户查看当前目录下文件 允许上传和下载文件,保证文件一致性 文件传输过程中显示进度条 附加功能:支持文件的断点续传(仅下载) 程序 1.最最重要的readme: ### 作者介绍: * author:lzl ### 博客地址: * http://www.cnblogs.c

移动平台WEB前端开发技巧

1.首先我们来看看webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" /><meta content="yes" name="apple-mobile-web-

手把手教会你微信公众平台自定义菜单开发——创建菜单

一如既往的,关于微信公众平台的开发,不算出自大牛的代码,但是简单易懂适合刚入门的朋友. 首先先介绍一下逻辑,因为发现很多朋友都不能看懂微信官方的文档,当然啦,这跟你是否认真看有关的,认真看总能看懂的,废话不说了.此时,我当你已经有一个已经申请到自定义菜单开发权限的微信服务号.首先,你要在后台开发模式下面找到你的AppId 还有 AppSecret并且记下来,然后通过这两个官方发放给你的ID去获取一个ACCESS_TOKEN[官方解释是:第三方访问api资源的票据],稍后会通过这个ACCESS_T

移动平台WEB前端开发技巧汇总

您或许正在或准备参与一个WepApp项目,您或许正在Google搜索mobile development相关的文章,您或许是一名专业的WEB前端工程师,您或许想学习Mobile前端开发方面的技术,如果您被我说中了,呵呵那么这篇文章将为您带来意想不到的惊喜!当您看到这篇文章时,哥已经默认认为您是一名资深的WEB前端工程师,如果您不是,可能您会遇见许多不理解或听不懂的专业术语或前端技术(包括WEB.Mobile).但是这没有关系,给自己一点信心吧,用心的阅读下去…… 自Iphone和Android这

[转载]微信公众平台二次开发之自定义菜单接口

原文地址:微信公众平台二次开发之自定义菜单接口作者:糊涂人 今天在SAE上运行代码时出现了一个小问题,所以发一篇博客与大家分享,这也是我第一次写关于技术上的博客,希望大家帮忙顶顶 步骤1. 你要有一个公众号,自己申请,过程略,很简单的. 步骤2. 登陆进去->高级功能,这时候要想开发必须要输入url和token,这里方法我引一下别人的文章http://www.cnblogs.com/txw1958/p/wechat-tutorial.html. 步骤3. 如果上面的工作完成了,这个时候你会在高级

NeuChar 平台使用及开发教程(六):成为开发者

在上一篇<NeuChar 平台使用及开发教程(五):使用 NeuChar 的关键字回复服务>中,我们已经学习了如何命中关键字来反馈特定格式内容的信息,这是由微信开发者/运营者自己来维护的信息,那么如果我们自己有微信开发的经验,并且想要把这个能力释放出来,为其他的公众号,甚至小程序.钉钉等平台提供服务,我们应该怎么做呢? NeuChar 为大家提供了应用商店(AppStore),微信或其他平台账户(Neural Cells)可以通过订阅的方式来使用第三方开发者(也就是你)提供的服务. 更重要的是