Python Twisted -- 如何在Telnet或SSH中控制缓冲/非缓冲输入?

1 投票
1 回答
879 浏览
提问于 2025-04-17 06:16

我想写一个Python的Twisted服务器,让它能给客户端发送文本,同时客户端也能发文本回来,以便控制服务器。我打算用Telnet,客户端可以用Putty或者类似的终端工具……如果用SSH更简单的话,我也愿意尝试。

我想问的是,怎么配置服务器,让客户端可以发送原始的、不经过缓冲的字节(我不想让用户在输入命令后还得按回车)?另外,有没有办法在会话中间改变配置,这样我就可以在缓冲和不缓冲之间切换?

我觉得这可能和Telnet的选项34“行模式”有关——http://www.freesoft.org/CIE/RFC/1700/10.htm

但我不知道怎么设置Twisted来使用这个……

如果有人能帮我设置Telnet或SSH,我会非常感激!!!谢谢!

1 个回答

1

twisted.conch.telnet.TelnetBootstrapProtocol 是一个很好的例子,展示了如何进行一些选项协商。它还进行了一些 LINEMODE 的协商。你可以查看 这个实现 来了解更多细节,不过这里有一段代码,展示了服务器是如何请求客户端启用 linemode、naws 和 sga 的:

for opt in (LINEMODE, NAWS, SGA):
    self.transport.do(opt).addErrback(log.err)

一个真正的服务器在协商失败时,可能需要比 log.err 更复杂的错误处理,因为这时客户端的状态可能不太适合与服务器一起使用。

另外,看看 Twisted 附带的一些 有趣的终端演示。这些演示会逐个字符地处理输入。

撰写回答