who*_*ddy 4 delphi telnet indy10
使用Indy10 - DelphiXE.如何告诉我连接的telnet服务器TIdTelnet不回显我发送给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;
Run Code Online (Sandbox Code Playgroud)
看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当前状态不会改变,从而避免无限响应循环).
| 归档时间: |
|
| 查看次数: |
964 次 |
| 最近记录: |