1

我正在编写一个 FTP 服务器(在 Qt/C++ 中),现在我对“TYPE A”使用“200 Ok”,但我真的把它当作“TYPE I”对待——文件按原样发送。

我应该如何正确实施 TYPE A?以文本模式而不是二进制模式打开文件就足够了吗?

另外,我假设 SIZE 方法应该比在磁盘上返回文件的大小更复杂,它应该读取它并执行文本替换,然后以这种方式返回大小?

编辑:作为对评论的回应,以下是 RFC959 规范的相关摘录:

     3.1.1.1.  ASCII TYPE

        This is the default type and must be accepted by all FTP
        implementations.  It is intended primarily for the transfer
        of text files, except when both hosts would find the EBCDIC
        type more convenient.

        The sender converts the data from an internal character
        representation to the standard 8-bit NVT-ASCII
        representation (see the Telnet specification).  The receiver
        will convert the data from the standard form to his own
        internal form.

        In accordance with the NVT standard, the <CRLF> sequence
        should be used where necessary to denote the end of a line
        of text.  (See the discussion of file structure at the end
        of the Section on Data Representation and Storage.)

        Using the standard NVT-ASCII representation means that data
        must be interpreted as 8-bit bytes.

        The Format parameter for ASCII and EBCDIC types is discussed
        below.
4

1 回答 1

3

要以 ASCII 模式(类型 A)传输文件,您需要以文本模式打开文件,然后以行结束 CRLF 传输它们。如果您执行 SIZE 命令,您将需要根据传输类型报告大小。550 SIZE not allowed in ASCII mode因为如果不是在图像模式下使用该命令,这显然是为了获得正确的大小而扫描整个文件的开销太大。

于 2014-05-10T10:47:17.540 回答