在我的FTP服务器上列出目录时,“以ASCII模式接收裸线路馈送”警告

时间:2016-05-12 13:11:24

标签: c ftp

我正在创建一个FTP服务器作为学校项目,大多数命令都正常工作,我几乎已经钉PORT(数据传输的主动模式)。

使用ftp启动我的服务器,如:

ftp localhost 4242 // where 4242 is the port on which my server is listening

登录后使用命令ls,我会收到一条有效的ls输出,然后显示以下消息:

  

警告!以ASCII模式接收8个裸线路馈送   文件可能没有正确传输。

请注意,在ls中使用ftp时,它会在使用LIST命令之前自动切换到活动模式。

此错误表示什么?

完整输出:

200 Active Mode Enabled.
150 Directory listing.
total 56
drwxrwxr-x  4 kade_c kade_c  4096 mai   12 15:24 .
drwxr-xr-x 38 kade_c kade_c  4096 mai   12 14:58 ..
drwxrwxr-x  8 kade_c kade_c  4096 mai   12 15:17 .git
-rw-rw-r--  1 kade_c kade_c  1726 mai   11 10:35 Makefile
-rw-rw-r--  1 kade_c kade_c   161 mai   11 11:43 README.txt
-rwxrwxr-x  1 kade_c kade_c 29368 mai   12 15:24 server
drwxrwxr-x  4 kade_c kade_c  4096 mai    2 18:40 server_src
WARNING! 8 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 LIST complete.

最后,这是代码的一部分,它创建并连接到套接字并执行ls -la

server_write(client, "150 Directory listing.\r\n");
if (connect_data(client) == -1) // Creates socket and connects to it
  {
    server_write(client, "520 Impossible to reach client.\r\n");
    return;
  }
ofd = xdup(1);
xdup2(client->data.socket, 1);
system("ls -la");
xdup2(ofd, 1);
server_write(client, "226 LIST complete.\r\n");
close_data(client, -1);

2 个答案:

答案 0 :(得分:1)

我猜你将LF发送给客户端,而客户端(正确地)期望CRLF并且警告那些丢失CR的人。

根据FTP规范RFC 959, section 3.4. Transmission modes,在ASCII模式下,您只需要使用CRLF:

  

出于标准化转移的目的,发送主机将         翻译其内部行尾或记录表示结束         进入传输模式和文件规定的表示         结构,接收主机将执行反向         翻译为其内部表示。 ... ASCII文件中的行尾没有         记录结构应由<CRLF>

表示

答案 1 :(得分:-1)

此问题是因为您正在下载ASCII格式的文件。

登录FTP站点后。键入“ binay”,然后开始下载。

ftp>二进制 200类型设置为I