2015-11-20 75 views
1

我有一个C++服务器应用程序,它提供了一个监听TCP端口供支持人员连接。他们可以发出命令并获得回应。从应用程序的角度来看,它工作得很好。telnet协议:中断响应

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

我知道我可以:1)告诉他们不要使用的telnet或2),告诉他们做了toggle autoflush远程登录内部应用程序,或通过~/.telnetrc或什么的。但是我想宁愿这样做,如果可能的话,在服务器中以正确的协议顺序响应,让他们的客户端用随后的文本做正确的事情。这只是觉得它会是一个更好的用户体验。他们的工作足够糟糕。

这可能吗?我已经通过了RFC,但尚不清楚。从我过去使用的telnet,这感觉就像是可行的,但我的记忆可能是模糊的。

+0

如果可以,您需要调查为什么客户端的行为如此。当你得到休息时唯一需要采取的行动是停止你正在做的事情。没有协议响应。 – EJP

+0

这是标准的linux telnet客户端。 –

+0

我会尝试更多的TELNET客户端,只是为了检查他们是否都行为相同的方式。 – chenchuk

回答

2

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

您可能会也可能不会对IAC IP做出响应或采取措施,但您必须回复IAC DO TIMING-MARK。在你的情况最简单的方法是作出回应,你忽略IAC WONT TIMING-MARKFF FC 06),客户端应该继续正常显示所有的输出。

如果你真的终止当前的工作,那么你应该清空你的缓冲区,然后用IAC WILL TIMING-MARK响应,这意味着客户端将放弃从目前所有的服务器的输出的用户数据流中推^C的地方找到IAC WILL TIMING-MARKFF FB 06)。

+0

谢谢!这是我正在寻找的答案。 –