我正在使用面向行的telnet服务器,而不是客户端.
当前,要建立连接,我正在使用:
IAC DONT ECHO
IAC DONT SURPRESS-GO-AHEAD
IAC DO LINEMODE
IAC DO NAWS
当前,该服务器仅处理IAC AYT和与NAWS相关的内容.其他任何东西都被拒绝,像这样:
IAC DONT <OPTION>
但是,服务器仍然一次获得字符.
根据here,ECHO和SGA(同时)启用一次字符模式.但是,我都禁用了.
如何使客户端一次发送一行数据?
我正在使用GNU inetutils的telnet对此进行测试.
This question的标题与之相似,但是与标题相反,它涉及编写telnet客户端.
解决方法:
我只是检查了旧的telnet服务器源,然后从服务器端发送了WILL和WONT.我从客户端处理了DO和DONT.
您实际上是在尝试编码真正的telnet服务器,还是只是编码与一次一次发送数据的telnet兼容的服务器(例如基于文本的聊天或游戏服务器)?如果是后者,则可以取消大多数选择,因为根据我的经验,telnet客户端默认每次都排队.
对于我的游戏服务器(MUD),我在标准游戏模式下所做的一切就是在登录密码状态期间禁用/启用回显,或者进入字符模式并在用户调用PICO编辑器时启动伪tty.
更新:如果您打算认真编写telnet服务器或任何其他网络软件,我真的很喜欢经典的W. Richard Stevens系列. TCP / IP图解第1卷,该协议从实际的意义上涵盖了telnet,并且与RFC(如1184)(如果我记得)相结合,您将拥有所需的一切.