delphi – 如何用TIdTelnet来抑制回声?
使用Indy10 – DelphiXE.
如何告诉我与TIdTelnet连接的telnet服务器不回应我发送给telnet服务器的命令? 这是我目前的尝试(不起作用),我尝试在每次telnet写入时发送序列IAC DO SUPPRESS_LOCAL_ECHO,但我相信这必须在协商阶段完成? uses TIdTelnet,... procedure TIOTelnetConnection.SendSupressEcho; var Resp: TIdBytes; begin SetLength(Resp,3); Resp[0] := TNC_IAC; Resp[1] := TNC_DO; Resp[2] := TNO_SUPLOCALECHO; FIOConnection.IOHandler.Write(Resp); end; procedure TIOTelnetConnection.Write(Str: AnsiString); begin SendSupressEcho; if Str <> '' then FIOConnection.IOHandler.Write(Str); end; 看看TIdTelnet源我看到了Negotiate程序,但它受到保护,我该如何覆盖它的行为? 解决方法
如果服务器向您发送IAC WILL ECHO,TIdTelnet将被硬编码为发送IAC DO ECHO响应,然后触发OnTelnetCommand(tncNoLocalEcho)事件,告诉您不要在本地回显您发送的内容.
如果服务器向您发送IAC WONT ECHO,TIdTelnet将被硬编码为发送IAC DONT ECHO响应,然后触发OnTelnetCommand(tncLocalEcho)事件以告知您本地回显您发送的内容. 如果服务器向您发送IAC DO ECHO,TIdTelnet将被硬编码为发送IAC WILL ECHO响应,然后触发OnTelnetCommand(tncEcho)事件以告知您回显您收到的任何内容. 如果服务器向您发送IAC DONT ECHO,TIdTelnet将被硬编码为发送IAC WONT ECHO响应,然后触发OnTelnetCommand(tncLocalEcho)事件以告知您回显您收到的任何内容. 因此,如果您不希望服务器回显给您,您可以向服务器发送IAC DONT ECHO命令,而不是IAC DO SUPLOCALECHO命令.然后,服务器将相应地回复IAC WONT ECHO或IAC WILL ECHO(显然TIdTelnet将回复,但由于其ECHO当前状态不会改变,服务器将不会再次响应,从而避免无休止的响应循环). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |