Write FTP client by Qtopia Phone Edition

来源:互联网 发布:淘宝秒杀入口在哪里 编辑:程序博客网 时间:2024/05/16 03:57

 

    给客户做了一个小项目,在Marvell的一块开发板子上做些东西,Embedded Linux OS, 用 Qtopia Phone edition。

    需要从一个 FTP Server 上面下载一个Video来播放,我们所使用的那个Qtopia版本有一个非常简单的FTP class,但是不能用,没啥功能。然后相对应的 QT Desktop 版本有一个完全可以的QFtp class,但是却无法使用,不能集成到我的程序里面。曾经尝试把那个class的code整个copy到我的project里面,但在编译的时候发现,有很多包含的头文件啦,相应的API都不一样,这就需要把那些source code一起copy过来。折腾了大半天,没有搞定。然后有在网上搜了好多ftp的code,想集成到我的project中,最后,也以失败告终。

    没有办法了,最后只好自己动手写一个FTP client,直接就使用QSocket class来做。在一个同事的通力合作下,完成了,之后发现,也不是什么难事,不就是利用socket和server通讯,然后接收server端的 feedback,分析这个feedback,然后在做相应的下一步事情。

 

    下面把FTP相关的一些参考代码保存下来,以备将来使用。

 

FTP:文件传输协议(File Transfer Protocol) 


 文件传输协议(FTP)使得主机间可以共享文件。 FTP 使用 TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输。控制连接使用类似 TELNET 协议在主机间交换命令和消息。

FTP 的主要功能如下:

  • 提供文件的共享(计算机程序 / 数据);
  • 支持间接使用远程计算机;
  • 使用户不因各类主机文件存储器系统的差异而受影响;
  • 可靠且有效的传输数据。

FTP ,尽管可以直接被终端用户使用,但其应用主要还是通过程序实现。

FTP 控制帧即指 TELNET 交换信息,包含 TELNET 命令和选项。然而,大多数 FTP 控制帧是简单的 ASCII 文本,可以分为 FTP 命令或 FTP 消息。 FTP 消息是对 FTP 命令的响应,它由带有解释文本的应答代码构成。

 

命令描述ABOR中断数据连接程序ACCT <account>系统特权帐号ALLO <bytes> 为服务器上的文件存储器分配字节APPE <filename>添加文件到服务器同名文件CDUP <dir path>改变服务器上的父目录CWD <dir path>改变服务器上的工作目录DELE <filename>删除服务器上的指定文件HELP <command>返回指定命令信息LIST <name>如果是文件名列出文件信息,如果是目录则列出文件列表MODE <mode>传输模式(S=流模式,B=块模式,C=压缩模式)MKD <directory>在服务器上建立指定目录NLST <directory>列出指定目录内容NOOP无动作,除了来自服务器上的承认PASS <password>系统登录密码PASV请求服务器等待数据连接PORT <address>IP 地址和两字节的端口 IDPWD显示当前工作目录QUIT从 FTP 服务器上退出登录REIN重新初始化登录状态连接REST <offset>由特定偏移量重启文件传递RETR <filename>从服务器上找回(复制)文件RMD <directory>在服务器上删除指定目录RNFR <old path>对旧路径重命名RNTO <new path>对新路径重命名SITE <params>由服务器提供的站点特殊参数SMNT <pathname>挂载指定文件结构STAT <directory>在当前程序或目录上返回信息STOR <filename>储存(复制)文件到服务器上STOU <filename>储存文件到服务器名称上STRU <type>数据结构(F=文件,R=记录,P=页面)SYST返回服务器使用的操作系统TYPE <data type>数据类型(A=ASCII,E=EBCDIC,I=binary)USER <username>>系统登录的用户名

 

标准 FTP 信息如下:

响应代码解释说明110新文件指示器上的重启标记120服务器准备就绪的时间(分钟数)125打开数据连接,开始传输150打开连接200成功202命令没有执行211系统状态回复212目录状态回复213文件状态回复214帮助信息回复215系统类型回复220服务就绪221退出网络225打开数据连接226结束数据连接227进入被动模式(IP 地址、ID 端口)230登录因特网250文件行为完成257路径名建立331要求密码332要求帐号350文件行为暂停421服务关闭425无法打开数据连接426结束连接450文件不可用451遇到本地错误452磁盘空间不足500无效命令501错误参数502命令没有执行503错误指令序列504无效命令参数530未登录网络532存储文件需要帐号550文件不可用551不知道的页类型552超过存储分配553文件名不允许