gpt4 book ai didi

delphi - 如何使用 TO Telnet 抑制回声?

转载 作者:行者123 更新时间:2023-12-03 15:27:04 26 4
gpt4 key购买 nike

使用 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 ECHOTIdTelnet 会被硬编码为发送 IAC DO ECHO 响应,然后触发 OnTelnetCommand(tncNoLocalEcho) 事件,告诉您不要在本地回显您发送的内容。

如果服务器向您发送 IAC WONT ECHO,则 TIdTelnet 会被硬编码为发送 IAC DONT ECHO 响应,然后触发 OnTelnetCommand(tncLocalEcho) 事件来告诉您在本地回显您发送的内容。

如果服务器向您发送 IAC DO ECHOTIdTelnet 会被硬编码为发送 IAC WILL ECHO 响应,然后触发 OnTelnetCommand(tncEcho) 事件来告诉您回显收到的任何内容。

如果服务器向您发送 IAC DONT ECHO,则 TIdTelnet 会被硬编码为发送 IAC WONT ECHO 响应,然后触发 OnTelnetCommand(tncLocalEcho) 事件来告诉您回显收到的任何内容。

因此,如果您不希望服务器回显给您,您可以向服务器发送 IAC DONT ECHO 命令,而不是 IAC DO SUPLOCALECHO命令。然后,服务器将相应地回复 IAC WONT ECHOIAC WILL ECHO(显然 TIdTelnet 会回复,但服务器不会再次响应,因为它的 ECHO 当前状态没有改变,避免了无休止的响应循环。

关于delphi - 如何使用 TO Telnet 抑制回声?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17215259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com