在FTP服务器中实现“TYPE A”

时间:2014-05-10 10:29:46

标签: c++ qt ftp ftp-server

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

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

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

修改:在回复评论时,请参阅the RFC959 spec的相关摘录:

     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.

1 个答案:

答案 0 :(得分:3)

要传输具有ASCII模式(A类型)的文件,您需要以文本模式打开文件,然后使用行结束CRLF传输它们。如果实施SIZE命令,则需要根据传输类型报告大小。因为显然扫描整个文件的开销太大,只是为了获得正确的大小,如果命令不是在图像模式下使用,服务器通常会返回550 SIZE not allowed in ASCII mode