tcp - Telnet协议(protocol): response to break

标签 tcp telnet

我有一个 C++ 服务器应用程序,它提供了一个监听 TCP 端口供支持人员连接。他们可以发出命令并获得响应。从应用程序的角度来看,它运行良好。

当他们使用telnet(1)进行连接时,如果他们(由于某种原因)键入^C,我的问题就会出现。我的服务器看到 telnet 发送给我的已解析控制字符,我可以根据需要忽略或处理它们。但是telnet客户端本身会进入某种状态,停止将服务器的响应输出到客户端的屏幕。

我知道我可以 1) 告诉他们不要使用 telnet 或 2) 告诉他们在 telnet 应用程序内或通过 执行toggle autoflush ~/.telnetrc 或其他。但如果可能的话,我希望做的是在服务器中使用正确的协议(protocol)序列进行响应,以使客户端使用后面的文本执行正确的操作。这感觉对他们来说会是更好的用户体验。他们的工作已经够糟糕的了。

这可能吗?我已经浏览了 RFC,但还不清楚。从我自己过去使用telnet来看,感觉这是可行的,但我的内存可能比较模糊。

最佳答案

IAC DO TIMING-MARK (FF FD 06) 背后的想法是抑制被 IAC IP 中断的进程的输出中断处理(FF F4)命令。通过这种方式,telnet 客户端程序会隐藏用户的所有输出,直到收到正确的计时标记或服务器不支持计时标记的通知。

您可能会也可能不会对 IAC IP 作出回应或采取行动,但您必须回应 IAC DO TIMING-MARK。对于您的情况,最简单的方法是通过 IAC WONT TIMING-MARK (FF FC 06) 回复您忽略它,并且客户端应继续正常显示所有输出。

如果你真的终止当前作业,那么你应该刷新缓冲区,然后用 IAC WILL TIMING-MARK 进行响应,这意味着客户端将丢弃从用户推送时起的所有服务器输出^C 到流中找到 IAC WILL TIMING-MARK (FF FB 06) 的位置。

关于tcp - Telnet协议(protocol): response to break,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33835940/

相关文章:

tcp - Node.js TCP 转发器

tcp - 不同 Goroutine 中的 ZeroMQ 上下文如何通信?

linux - telnet aspmx.l.google.com 并首先尝试 ipv6

memcached - 无法连接到本地主机上的memcached服务器,如何调试?

android - 在不耗尽电池的情况下与服务器保持持续的互联网连接

java - java(client-server)中如何使用wireshark检查与SSL sockets的连接等疑惑

Java Server 关闭后向客户端发送消息

php - 如何构建串联的短信 pdu?获取垃圾字符

c - 在 Telnet session 中处理转义序列

javascript - 多个套接字覆盖自身