如何使用原始 FTP STOR 命令

How to use raw FTP STOR command

我正在尝试使用原始命令将文件上传到 FTP 服务器。是的,我知道有一些程序和软件包可以做到这一点,但我的是一个没有这些奢侈品的嵌入式应用程序。我的问题是,在成功发出所有相应的命令后,我发现该文件在服务器上不存在。

这是我所做的:

  1. 我在端口 21 (Sock1) 上建立到我的 FTP 服务器的命令套接字连接并接收问候语(代码 220)
  2. 我发送"USER myusername"并收到成功码331
  3. 我发送 "PASS mypassword" 并收到成功代码 230
  4. 我发送"TYPE I"并收到成功码200
  5. 我发送 "PASV" 并收到成功代码 227 和 6 个数字。
  6. 我将这些数字解码为 IP 地址和端口。他们看起来很合理。
  7. 我成功地打开了到上述地址和端口的 TCP 数据套接字连接 (Sock2)。
  8. 我发送 "STOR myfilename" 并收到成功代码 150。
  9. 我成功地将我的文件名的内容发送到Sock2。
  10. 我关闭 Sock2,然后关闭 Sock1。

似乎一切正常,但服务器上没有文件。谁能告诉我我做错了什么?

我知道服务器没问题,因为我可以使用各种 FTP 客户端程序(使用 PUT 命令)上传文件。

  1. I successfuly send the contents of myfilename to Sock2.
  2. I close Sock2, then Sock1.

传输完成后,需要关闭数据连接 (sock2) 以向服务器发出数据结束信号。服务器随后将向客户端回复 226 响应。应该在关闭控制通道 (sock1) 之前读取此响应。如果 sock1 和 sock2 几乎同时关闭,就像这里所做的那样,服务器可能会在数据通道 (sock2) 关闭之前注意到控制通道 (sock1) 的关闭,因此会将数据传输视为中止。