我有一个应用程序,我接受来自telnet客户端的套接字连接,并建立一个简单的,键盘驱动的字符GUI。
telnet客户端,至少在Linux上,默认为一次一行模式,因此我必须手动执行^]mode char
。
相关RFC的略图表明,如果我的应用程序在客户端连接后立即发送字符IAC DONT LINEMODE (\377\376\042)
,则应强制客户端进入字符模式。但是,它没有任何区别。
最简单的代码是什么?理想情况下只是一个要发送的字符串。我的应用程序可以吸收客户端发回的任何垃圾。
答案 0 :(得分:8)
有趣。我发送了更多运气
IAC WILL ECHO IAC WILL SUPPRESS_GO_AHEAD IAC WONT LINEMODE
255 251 1 255 251 3 255 252 34
IAC WONT LINEMODE似乎是多余的:我的telnet客户端似乎没有它就到了正确的状态,但是为了完整性我把它留了下来。
答案 1 :(得分:6)
为了它的价值,我自己解决了。
// IAC WONT LINEMODE IAC WILL ECHO
write(s,"\377\375\042\377\373\001",6);
将远程(至少从Linux机箱上的Xterm telnet)带到正确的状态。
答案 2 :(得分:0)
Kevin的解决方案效果很好:
write(s,"\377\375\042\377\373\001",6);
虽然评论稍有不妥。它应该说“DO LINEMODE”,而不是“WONT LINEMODE”,即:
// IAC DO LINEMODE IAC WILL ECHO
(资料来源:rfc854)