在我的系统 (Debian) 提供的 telnet 上,换行符 ( \n
) 似乎被翻译成 CRLF ( \r\n
)。具体来说,如果我运行,例如,netcat -l -p 3334 > file
并echo a | telnet localhost 3334
在另一个终端中运行,那么 do hexdump file
,我得到:
0000000 0d61 000a
0000003
这是a\r\n
小端序,即a
后跟CRLF。
然而,手册页telnet
说,关于crlf
切换:
如果为 TRUE,则回车将作为 <CR><LF> 发送。如果这是 FALSE,则回车将作为 <CR><NUL> 发送。此切换的初始值为 FALSE。
所以我希望看到回车作为 CR 发送,然后是 NUL。为什么这不是我观察的原因?
(请注意,我没有/etc/telnetrc
or ~/.telnetrc
。此外,相比之下,在我的系统上,netcat
(当用作客户端时)将换行符作为 LF ( \n
) 发送,除非-C
使用该选项。)
看看Telnet 协议规范是怎么说的[强调我的]:
crlf
标志集表示 CR 符合“预期 CR LF 组合操作”的条件。crlf
设置标志表示 CR 表示“实际上只需要回车”。但是在您的情况下,输入(来自 的输出)根本
echo a
不包含 CR 。它包含了根据“CR LF 联合行动意图”翻译为“CR LF”的 LF。该标志不适用,因为输入流中没有 CR。提供实际包含 CR 的输入:
并且接收器将获得“CR LF”或“CR NUL”,具体取决于您的设置(in
/etc/telnetrc
或~/.telnetrc
)。