FTP(文件传输协议)是用于在网络上传输文件和目录的协议。它的主要作用是:
- 文件上传:支持客户端向FTP服务器上传文件。
- 文件下载:支持客户端从FTP服务器下载文件。
- 目录浏览:支持客户端浏览FTP服务器上的目录结构。
- 目录操作:支持客户端在FTP服务器上创建、删除、重命名目录。
- 权限控制:基于用户、密码及目录权限控制客户端对FTP服务器的访问。
- 重命名:支持客户端对FTP服务器上的文件和目录进行重命名操作。
- 删除:支持客户端删除FTP服务器上的文件和目录。
- 追加:支持客户端向FTP服务器上的文件追加内容。
- 重定位:支持客户端跳转至FTP服务器目录结构中的任意位置。
FTP使用两个TCP连接,一个用于控制连接,一个用于数据连接。主要的命令包含:
- USER:登录命令,用于客户端登录FTP服务器。
- PASS:密码命令,用于客户端发送登录密码。
- CWD:更改目录命令,用于客户端浏览目录结构。
- CDUP:返回上级目录命令。
- PWD :显示工作目录命令,用于查询当前目录。
- RETR:检索文件命令,用于客户端下载文件。
- STOR:存储文件命令,用于客户端上传文件。
- DELE:删除文件命令,用于客户端删除文件。
- RMD :删除目录命令,用于客户端删除空目录。
代码示例:
// FTP客户端
Socket ctrlSocket = new Socket("ftpserver", 21); // 控制连接
Socket dataSocket = new Socket("ftpserver", 20); // 数据连接
// 发送USER, PASS命令进行登录
OutputStream ctrlOut = ctrlSocket.getOutputStream();
ctrlOut.write("USER ftpuser\r\n".getBytes());
ctrlOut.write("PASS 123456\r\n".getBytes());
// 发送CWD, RETR命令下载文件
ctrlOut.write("CWD /pub\r\n".getBytes());
ctrlOut.write("RETR file.txt\r\n".getBytes());
InputStream dataIn = dataSocket.getInputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = dataIn.read(buffer)) != -1) {
byte[] data = new byte[len];
System.arraycopy(buffer, 0, data, 0, len);
// 处理下载的数据
}
FTP协议作为文件传输的重要手段,在日常工作和生活中得到广泛应用。但由于其 PASSWORD 命令发送的登录密码是明文的,存在一定安全隐患,已部分被SFTP、FTPS等安全版本替代。