0

我正在尝试在 AS3 中创建一个 FTP 客户端。它几乎适用于我所有的 ftp 主机,但我无法登录主机,因为我在用户名中有一个“@”(商业)字符。似乎是字符编码错误。

我以这种方式发送字符串:

ftp_username = "aaaaa@bbbbb.ccc"
s.writeUTFBytes("USER " + ftp_username + "\n");

但我从来没有从 FTP 服务器收到 331 响应(接受用户名)。

ps:我尝试用 '%40' 或 '+' 替换 '@' 字符,但没有成功。

4

1 回答 1

0

在处理 FTP 协议标准的RFC 959的第 4.1 节末尾,它遵循 Telnet 协议和 Telnet eol 代码。

引用 RFC:

文件传输协议遵循 Telnet 协议的规范,用于通过控制连接进行的所有通信。由于用于 Telnet 通信的语言可能是协商的选项,因此接下来两节中的所有引用都将指向“Telnet 语言”和相应的“Telnet 行尾代码”。目前,人们可能会将它们理解为 NVT-ASCII 和<CRLF>. 不会引用 Telnet 协议的其他规范。

然后在RFC 1123 中,第 3.3.1 节将正确的行尾引用为<CRLF>

Telnet 协议将序列 CR LF 定义为“行尾”。对于终端输入,这对应于在用户终端上按下命令完成或“行尾”键;在 ASCII 终端上,这是 CR 键,但也可以标记为“Return”或“Enter”。

然后讨论不同平台上行尾的歧义。并说应该允许<CR NUL>, 或\r\0, 但再次说这<CRLF>应该是默认值。

Newlines的维基百科文章中,也讨论了这个问题,并说:

大多数文本 Internet 协议(包括 HTTP、SMTP、FTP、IRC 和许多其他协议)都要求在协议级别使用 ASCII CR+LF (0x0D 0x0A),但建议宽容的应用程序也识别单独的 LF。在实践中,有许多应用程序错误地使用 C 换行符 '\n' 代替(请参阅下面的编程语言中的换行符部分)。当试图与遵守更严格的标准解释的系统进行通信时,这会导致问题;一个这样的系统是 qmail MTA,它主动拒绝接受来自发送裸 LF 而不是所需 CR+LF 的系统的消息。

所以坚持下去,\r\n你会没事的...

于 2011-11-09T17:18:35.487 回答