最近因为公司有一个两个业务模块需要使用到FTP上传和下载。因为公司主要使用Visual c++开发产品,所以自己去网上看了一下相关的文章。但是由于网上的文章自己感觉有些要点没有描述,所以自己也花了不少时间来理解整个流程。为了避免大家也碰到相同的问题而花费不必要的时间。特写这篇博文记录一下几个关键点。
- 关于FTP原理部分强烈推荐阅读IBM开发者论坛的文章------使用 Socket 通信实现 FTP 客户端程序。这篇文章对于如何使用C语言进行FTP编程的大部分内容已经阐述清楚了。但是很遗憾作者没有提供完整的代码。(本人实现了一份对应教程的C代码在文章最后提供给大家下载)
- 在接收FTP欢迎消息的时候需要注意的是响应消息可能有多行。根据FTP协议(RFC959)中第4部分关于FTP响应的描述:
Thus the format for multi-line replies is that the first line will begin with the exact required reply code, followed immediately by a Hyphen, "-" (also known as Minus), followed by text. The last line will begin with the same code, followed immediately by Space <SP>, optionally some text, and the Telnet end-of-line code.
表明在多行响应的时候第一行在响应码(3位数字)后面紧跟字符"-",最后一行也必须以相同的响应码开始并且紧跟一个空格" "。如:
For example:
123-First line
econd line
234 A line beginning with numbers
123 The last line
- 不管是下载还是上传文件,在完成后请关闭数据socket(控制连接会收到226),如果不关闭就退出程序可能会造成上传/下载的内容不完整。
CSDN站内下载: 示例C语言代码 (Windows下MinGW编译和测试)