【问题标题】:Why does telnet send data only on a Enter?为什么 telnet 只在 Enter 上发送数据?
【发布时间】:2015-03-27 05:18:35
【问题描述】:

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

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

【问题讨论】:

  • @KorayTugay,不知何故搞砸了链接,现在修复它
  • 这个问题背后有趣的部分是,而不是问这个,你应该继续做一个简单的 telnet 克隆,它会自动传输数据,然后尝试使用它。走着瞧吧。我可以做一个预测:你会感到相当沮丧,甚至可能导致需要手动修复的问题,具体取决于传输的结果。
  • 我有完全相反的问题。我正在通过 telnet 客户端尝试本地聊天应用程序。但是,一旦我键入(即每个字母),每个客户端都会将消息发送到服务器。我只想在输入后发送数据。我怎样才能做到这一点(在我的 Windows 机器上)。

标签: sockets telnet


【解决方案1】:

我知道这是一个旧线程,但我只是想添加我的发现。 Telnet 程序完全控制逐个字符或逐行发送的方式。 我在 MAC 上对此进行了测试,所以我不确定其他平台是否按 ^] 可以键入“模式字符”或“模式行”,您可以更改此行为。

【讨论】:

  • 感谢@inaki-zuloaga 这是我正在寻找的部分。现在我正在阅读 RFC 854 中的 option negotiation :)
【解决方案2】:

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

【讨论】:

  • 这不是和上面的答案完全不同吗?
  • 在当今时代,通常可以协商子选项,以便字符可以在键入时发送 - 但是无论您应该是一个重要的问题!请记住,链接的远端可能在世界另一端的某个地方,因此是时候发送角色并在屏幕上回显之前获得回复(这就是为什么,大概你想这样做) 可能会长到让人不舒服,而且效率很低。在几乎所有情况下,最好在 native 模式下操作,其中一行(键入的)文本可能会被编辑,然后整个发送...
  • 根据我的测试,这个确认是错误的,我使用macOS上的命令行telnet客户端和java中的socket服务器程序进行了测试,服务器只在我按下进入telnet客户端后才收到消息.
  • 这是错误的。默认情况下 telnet line-buffers 数据,仅在 Enter 时发送。但是,您可以将其配置为在键入时发送数据,并且 telnet 服务器(您要连接的东西)也可以将其配置为在键入时发送数据。
【解决方案3】:

这是一种实现选择。

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

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

【讨论】:

  • 这不是和下面的答案完全不同吗?
  • 这是错误的。默认情况下 telnet line-buffers 数据,仅在 Enter 时发送。但是,您可以将其配置为在键入时发送数据,并且 telnet 服务器(您要连接的东西)也可以将其配置为在键入时发送数据。
  • windows(win10)linux(ubuntu 18.04) 有不同的 telnet 默认配置。 windows telnet 默认发送你输入的 echo char; ubuntu telnet defalut 输入时发送行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2017-02-10
  • 2017-06-18
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
相关资源
最近更新 更多