使用 Socket 通信实现 FTP 客户端程序

2015-01-18 09:59:35|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, 网络通信|来源:唯设编程网

主要用到的 FTP 命令

FTP 每个命令都有 3 到 4 个字母组成,命令后面跟参数,用空格分开。每个命令都以 " "结束。

要下载或上传一个文件,首先要登入 FTP 服务器,然后发送命令,最后退出。这个过程中,主要用到的命令有 USER、PASS、SIZE、REST、CWD、RETR、PASV、PORT、QUIT。

USER: 指定用户名。通常是控制连接后第一个发出的命令。“USER gaoleyi ”: 用户名为gaoleyi 登录。

PASS: 指定用户密码。该命令紧跟 USER 命令后。“PASS gaoleyi ”:密码为 gaoleyi。

SIZE: 从服务器上返回指定文件的大小。“SIZE file.txt ”:如果 file.txt 文件存在,则返回该文件的大小。

CWD: 改变工作目录。如:“CWD dirname ”。

PASV: 让服务器在数据端口监听,进入被动模式。如:“PASV ”。

PORT: 告诉 FTP 服务器客户端监听的端口号,让 FTP 服务器采用主动模式连接客户端。如:“PORT h1,h2,h3,h4,p1,p2”。

RETR: 下载文件。“RETR file.txt ”:下载文件 file.txt。

STOR: 上传文件。“STOR file.txt ”:上传文件 file.txt。

REST: 该命令并不传送文件,而是略过指定点后的数据。此命令后应该跟其它要求文件传输的 FTP 命令。“REST 100 ”:重新指定文件传送的偏移量为 100 字节。

QUIT: 关闭与服务器的连接。

FTP 响应码

客户端发送 FTP 命令后,服务器返回响应码。

响应码用三位数字编码表示:

第一个数字给出了命令状态的一般性指示,比如响应成功、失败或不完整。

第二个数字是响应类型的分类,如 2 代表跟连接有关的响应,3 代表用户认证。

第三个数字提供了更加详细的信息。

第一个数字的含义如下:

1 表示服务器正确接收信息,还未处理。

2 表示服务器已经正确处理信息。

3 表示服务器正确接收信息,正在处理。

4 表示信息暂时错误。

5 表示信息永久错误。

第二个数字的含义如下:

0 表示语法。

1 表示系统状态和信息。

2 表示连接状态。

3 表示与用户认证有关的信息。

4 表示未定义。

5 表示与文件系统有关的信息。

Socket 编程的几个重要步骤

Socket 客户端编程主要步骤如下:

1.    socket() 创建一个 Socket

2.    connect() 与服务器连接

3.    write() 和 read() 进行会话

4.    close() 关闭 Socket

Socket 服务器端编程主要步骤如下:

1.    socket() 创建一个 Socket

2.    bind()

3.    listen() 监听

4.    accept() 接收连接的请求

5.    write() 和 read() 进行会话

6.    close() 关闭 Socket

实现 FTP 客户端上传下载功能

下面让我们通过一个例子来对 FTP 客户端有一个深入的了解。本文实现的 FTP 客户端有下列功能:

1.    客户端和 FTP 服务器建立 Socket 连接。

2.    向服务器发送 USER、PASS 命令登录 FTP 服务器。

3.    使用 PASV 命令得到服务器监听的端口号,建立数据连接。

4.    使用 RETR/STOR 命令下载/上传文件。

5.    在下载完毕后断开数据连接并发送 QUIT 命令退出。

本例中使用的 FTP 服务器为 filezilla。在整个交互的过程中,控制连接始终处于连接的状态,数据连接在每传输一个文件时先打开,后关闭。

发表评论0条 】
网友评论(共?条评论)..
使用 Socket 通信实现 FTP 客户端程序