为什么telnet只在Enter上发送数据?

时间:2015-01-28 10:35:14

标签: sockets telnet

我正在使用Java套接字,而telnet似乎是一个模拟tcp客户端的好程序。

我不明白为什么telnet只在输入上发送数据?我不是在寻找黑客让它立即发送数据(因为可用(Send data over telnet without pressing enter))但我想了解telnet的内部工作/设计,这似乎是天生的。

4 个答案:

答案 0 :(得分:5)

这是一个实施选择。

基本上,使用TCP和UDP,您可以在发送之前缓冲尽可能多的数据。目标是最大化有效负载大小,这样您就不会为您键入的每个密钥发送单个数据包,这可以通过flush()每个字符上的套接字定制的Java telnet客户端轻松实现。

Telnet作为远程shell客户端诞生,并且由于普通的系统shell处理文本行,实现者发现在将数据刷新到服务器之前等待用户键入 ENTER 是合理的,如果收到部分行,将支持回车

答案 1 :(得分:1)

不,当您按Enter键时,telnet不会发送缓冲区,它会发送您键入的每个键。否则vi和其他一些编辑器将无效。是什么让你相信这是当你按Enter键时,你会得到主人的回复。例如,您键入ls –la,按Enter键即可获得响应,但telnet已逐个发送所有密钥,但按Enter键时会收到主机响应。大多数telnet模拟器都将remote echo选项设置为true,这意味着主机会回显您键入的所有键。要在more filename中测试此类型并按Enter键,它会显示一个信息页面,并等待一个键,您可以按空格键:再一页,输入:多一行,或Q退出。互联网上有很多关于telnet的信息,请查找RFC 854 Telnet Protocol Specification

答案 2 :(得分:1)

我知道这是一个老线程,但我只想添加我的发现。 Telnet程序完全控制字符或行的发送方式。 我在MAC上对此进行了测试,因此如果您按下^,我不确定其他平台是否可以输入"模式字符"或"模式行"你可以改变这种行为。

答案 3 :(得分:0)

要将telnet配置为不按Enter即可发送数据,应禁用线路模式选项。这是通过模式telnet子命令完成的:

telnet> mode character

这将在时间模式下启用字符。