我必须对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);
答案 0 :(得分:1)
FTP协议指定LIST
命令应在NETASCII中发送其结果,这意味着换行符表示为CRLF。但标准的Linux程序只为输出换行输出LF。
您需要运行ls
命令,并将其输出连接到管道。您的服务器从管道读取,用“\ r \ n”替换任何\n
个字符,并将其写入套接字。
传输实际文件时,您需要做类似的事情,除非客户端请求二进制模式。