FTP协议是什么?有什么作用?

FTP(文件传输协议)是用于在网络上传输文件和目录的协议。它的主要作用是:

  1. 文件上传:支持客户端向FTP服务器上传文件。
  2. 文件下载:支持客户端从FTP服务器下载文件。
  3. 目录浏览:支持客户端浏览FTP服务器上的目录结构。
  4. 目录操作:支持客户端在FTP服务器上创建、删除、重命名目录。
  5. 权限控制:基于用户、密码及目录权限控制客户端对FTP服务器的访问。
  6. 重命名:支持客户端对FTP服务器上的文件和目录进行重命名操作。
  7. 删除:支持客户端删除FTP服务器上的文件和目录。
  8. 追加:支持客户端向FTP服务器上的文件追加内容。
  9. 重定位:支持客户端跳转至FTP服务器目录结构中的任意位置。

FTP使用两个TCP连接,一个用于控制连接,一个用于数据连接。主要的命令包含:

  1. USER:登录命令,用于客户端登录FTP服务器。
  2. PASS:密码命令,用于客户端发送登录密码。
  3. CWD:更改目录命令,用于客户端浏览目录结构。
  4. CDUP:返回上级目录命令。
  5. PWD :显示工作目录命令,用于查询当前目录。
  6. RETR:检索文件命令,用于客户端下载文件。
  7. STOR:存储文件命令,用于客户端上传文件。
  8. DELE:删除文件命令,用于客户端删除文件。
  9. 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等安全版本替代。