【发布时间】:2018-07-24 22:03:35
【问题描述】:
假设我有一个可用的 Telnet 服务器和客户端;客户端是我自己用 C 编程创建的,虽然服务器不在我的控制之下(在我的情况下,它是 Perle Systems IOLAN SCS48,但它可以是任何支持 RFC2217 的 Telnet 设备)。
我想使用设备的串行隧道功能(通过用于 Telnet 的 RFC 2217 协议),但只能在连接开始时使用。因此,我收到了来自服务器的四个协商请求(WILL TRANSMIT-BINARY、DO TRANSMIT-BINARY、WILL ECHO、DO SUPPRESS-GO-AHEAD、WILL SUPPRESS-GO-AHEAD 和 DO COM-PORT-OPTION;最后一个来自 RFC 2217),我对所有这些请求响应,然后设置波特率、数据大小、奇偶校验位和停止位。
到目前为止一切顺利,但现在我想重新安排通信,以便服务器忽略所有未来的命令(尤其是 IAC 字符 0x255),所以我可以通过设备将十六进制转换的字符串传递给接收端(连接到设备的串行端口),它获取我发送的每个字节(并且不会丢失字符串中某处的每个 0x255 的三个字节,或者有 0x255 0x250 (IAC SB) 的七个字节)。
或者,是否有可能使服务器将转义转义字符(连续两个 0x255,然后作为输入打印)作为单个 0x255 传递?
我不想关闭连接以重新打开它是原始连接,因为我的串行设置会丢失(因为这就是设备的 COM 端口重定向的工作方式,我想)。但是,我不需要重新建立命令侦听,因此如果我需要重新配置波特率,可以简单地关闭连接并作为另一个 Telnet 连接重新打开。
我该如何处理?
【问题讨论】:
标签: c sockets connection telnet