Java Telnet客户端发送选项时IAC符号重复问题求助
Telnet发送选项时IAC被重复的问题解答
你遇到的IAC(0xff)被重复的问题,本质是TelnetClient的OutputStream已经自动做了转义处理。
Telnet协议规定:当需要在数据流中发送IAC字符本身时,必须连续发送两个IAC来转义(避免被当作命令前缀解析)。而你用的telnetClient.getOutputStream()返回的输出流,内部会自动扫描所有输出的字节,只要碰到0xff就自动添加一个额外的0xff转义——哪怕这个0xff是你用来作为Telnet命令前缀的IAC,它也会统一处理。
所以你手动构造的[0xff, 0xfd, 0x03],经过这个输出流处理后,第一个0xff会被转义成两个0xff,最终就变成了[0xff, 0xff, 0xfd, 0x03]。
解决方案
不要直接操作OutputStream发送Telnet命令,改用TelnetClient提供的API发送选项:
// 发送SUPPRESS GO AHEAD选项的DO命令(选项编号3) telnetClient.sendOption(TelnetOption.SUPPRESS_GO_AHEAD, TelnetCommand.DO);
如果需要自定义选项编号,也可以用重载方法:
telnetClient.sendOption(3, TelnetCommand.DO);
这样TelnetClient会正确处理命令结构,不会出现多余的IAC转义。
内容的提问来源于stack exchange,提问作者Haster
相关产品推荐
相关产品推荐

