c - Telnet 从服务器启用线路模式

标签 c linux networking gnu telnet

我正在开发面向线路的 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++),我在标准游戏模式下所做的一切就是在登录密码状态期间禁用/启用 echo,或者在用户调用 PICO 编辑器时启动字符模式并启动伪 tty。

更新:如果您打算认真编写一个 telnet 服务器或任何其他网络软件,我真的很喜欢经典的 W. Richard Stevens 系列。 TCP/IP Illustrated Volume 1, The Protocols 涵盖了实用意义上的 telnet,并结合 1184(如果我记得的话)等 RFC,您将拥有所需的一切。

关于c - Telnet 从服务器启用线路模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24786761/

相关文章:

c++ - 使用 epoll() 命令从文件描述符中读取数据

c++ - 我的 C++ 代码无法处理(一点点)快速数据流量

android - 使用广播接收器时出错

networking - 如何在 CoAP 一致性测试套件中对测试用例进行分组

使用 pthread 编译/链接错误

c - 为什么我得到;使用类型为 'char *' 的表达式初始化 'const char *' 会丢弃限定符?

更改内核中的文件权限

java - 如何向正在运行的 Linux 进程发送 Ctrl-Break?

c - 撤消 ungetc() : "How" do fseek(), rewind() 和 fsetpos() 的效果吗?是否每次都重新填充缓冲区?

c - "cnt += num % 2;"和 "if (num % 2)++cnt;"之间的区别