Python Twisted -- 如何在Telnet或SSH中控制缓冲/非缓冲输入?
我想写一个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 附带的一些 有趣的终端演示。这些演示会逐个字符地处理输入。