0

我必须编写一个 FTP 服务器,但我对如何传输数据有疑问。

我在 linux 上使用ftp命令来测试它,我目前正在处理LIST,它发送工作目录中的文件/目录列表。一切正常(ftp 可以很好地打印文件列表),除了ftp打印以下警告:

WARNING! 5 bare linefeeds received in ASCII mode
File may not have transferred correctly.

我想删除该警告,我认为ftp需要二进制数据,但我不知道如何通过套接字发送这样的数据,我目前正在做最基本的发送ls结果的方法:

dup2(dst_channel, 1);
execlp("ls", "ls", "-l", NULL);
4

1 回答 1

1

FTP 协议规定该LIST命令应以 NETASCII 格式发送其结果,这意味着换行符表示为 CRLF。但是标准的 Linux 程序只输出换行符的 LF。

您需要运行ls命令并将其输出连接到管道。您的服务器从管道中读取数据,将任何\n字符替换为 `\r\n',然后将其写入套接字。

在传输实际文件时,您需要做类似的事情,除非客户端请求二进制模式。

于 2013-04-09T21:33:52.293 回答