强制 telnet 客户端进入字符模式

问题描述 投票:0回答:4

我有一个应用程序,我接受来自 telnet 客户端的套接字连接,并建立一个简单的键盘驱动的字符 GUI。

telnet 客户端,至少在 Linux 上,默认为一次一行模式,所以我总是必须手动执行

^]mode char

浏览相关 RFC 表明,如果我的应用程序只是在客户端连接后立即发送字符

IAC DONT LINEMODE (\377\376\042)
,则应强制客户端进入字符模式。不过,这没有什么区别。

完成这项工作的最简单的代码是什么?理想情况下只是要发送的字符串。我的应用程序可以吸收客户端发回的任何垃圾。

char default telnet
4个回答
10
投票

有趣。我发送的运气比较好

IAC WILL ECHO IAC WILL SUPPRESS_GO_AHEAD IAC WONT LINEMODE
255  251    1 255  251                 3 255  252       34

IAC WONT LINEMODE 似乎是多余的:我的 telnet 客户端似乎在没有它的情况下达到了正确的状态,但为了完整性我将其保留。


8
投票

不管怎样,我自己解决了。

// IAC WONT LINEMODE IAC WILL ECHO

write(s,"\377\375\042\377\373\001",6);

使远程(至少从 Linux 机器上的 Xterm 远程登录)进入正确的状态。


3
投票

凯文的解决方案效果很好:

write(s,"\377\375\042\377\373\001",6);

虽然评论略有错误。它应该说“DO LINEMODE”,而不是“WONT LINEMODE”,即:

// IAC DO LINEMODE IAC WILL ECHO

(来源:rfc854


0
投票

LINEMODE 与旧的逐行模式不同。如果没有协商任何内容,连接默认为“旧的逐行模式”。您想要启用字符模式,服务器可以通过发送

IAC WILL GA IAC WILL ECHO
来实现。 LINEMODE 是另一个选项,它将字符模式与本地回显相结合,并且还指定您能够协商 LINEMODE 的子选项。

© www.soinside.com 2019 - 2024. All rights reserved.