如何通过TIdTelnet在Delphi中有效消除网络回声?
- 内容介绍
- 文章标签
- 相关推荐
本文共计668个文字,预计阅读时间需要3分钟。
使用Indy10 - DelphiXE,若与TIdTelnet连接的telnet服务器不响应您发送给telnet服务器的命令,可能是由于以下原因:
1. 命令格式错误:请检查您发送的命令格式是否正确。telnet命令通常需要正确的大小写和参数。
2. 命令未被识别:确保您发送的命令是telnet服务器支持的命令。
3. 本地回显未关闭:虽然您尝试了发送IAC DO SUPPRESS_LOCAL_ECHO命令来关闭本地回显,但可能没有正确实施。请确保命令格式正确,并且服务器正确执行了该命令。
4. 服务器配置问题:telnet服务器可能配置了特定的安全或访问控制设置,阻止了未授权的命令执行。
5. 连接问题:检查您的网络连接是否稳定,以及telnet服务器是否在运行。
6. 服务器负载:如果服务器负载过高,可能会延迟响应或忽略某些命令。
建议您检查以下步骤:
- 确保telnet命令格式正确。- 确认telnet服务器支持您要执行的命令。- 检查本地回显是否已关闭。- 确认服务器配置允许您的命令执行。- 检查网络连接和服务器状态。- 考虑服务器负载问题。
如果问题仍然存在,可能需要更深入地检查telnet服务器的日志或联系技术支持以获取帮助。
使用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当前状态不会改变,服务器将不会再次响应,从而避免无休止的响应循环).
本文共计668个文字,预计阅读时间需要3分钟。
使用Indy10 - DelphiXE,若与TIdTelnet连接的telnet服务器不响应您发送给telnet服务器的命令,可能是由于以下原因:
1. 命令格式错误:请检查您发送的命令格式是否正确。telnet命令通常需要正确的大小写和参数。
2. 命令未被识别:确保您发送的命令是telnet服务器支持的命令。
3. 本地回显未关闭:虽然您尝试了发送IAC DO SUPPRESS_LOCAL_ECHO命令来关闭本地回显,但可能没有正确实施。请确保命令格式正确,并且服务器正确执行了该命令。
4. 服务器配置问题:telnet服务器可能配置了特定的安全或访问控制设置,阻止了未授权的命令执行。
5. 连接问题:检查您的网络连接是否稳定,以及telnet服务器是否在运行。
6. 服务器负载:如果服务器负载过高,可能会延迟响应或忽略某些命令。
建议您检查以下步骤:
- 确保telnet命令格式正确。- 确认telnet服务器支持您要执行的命令。- 检查本地回显是否已关闭。- 确认服务器配置允许您的命令执行。- 检查网络连接和服务器状态。- 考虑服务器负载问题。
如果问题仍然存在,可能需要更深入地检查telnet服务器的日志或联系技术支持以获取帮助。
使用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当前状态不会改变,服务器将不会再次响应,从而避免无休止的响应循环).

