如何通过套接字发送/接收二进制数据?

时间:2013-04-09 21:08:14

标签: c linux ftp encode ftp-server

我必须对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);

1 个答案:

答案 0 :(得分:1)

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

您需要运行ls命令,并将其输出连接到管道。您的服务器从管道读取,用“\ r \ n”替换任何\n个字符,并将其写入套接字。

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