0

我正在使用 TcpClient 作为字节数组从 Telnet 服务器读取数据并使用 ASCII 编码器转换为字符串,即:

int size;
byte[] buf;
tcpclient.Read(buf,0,MAX_BUFFER_SIZE);
string resp = new System.Text.ASCIIEncoding().GetString(fullBuffer, 0, fullBuffer.Length);

并具有buf读取的字节。我想在 中提取(并稍后回答)IAC 命令buf,而不是在resp. 你有一个有效的建议方法。

我首先想到的是:在resp(a) 中查找 "\0xFF" 字符串,如果后面跟着 "\0xFF",将 "\0xFF\0xFF" 替换为 "\0xFF" (b) 如果不提​​取后面的字节作为 IAC 并回答. resp.Remove()两个字符。

这是一个有效的解决方案吗?您是否建议在byte[]级别解决它(有没有办法让byte[]ASCII 编码器忽略其中的一些值?)或编码后string

4

1 回答 1

0

我首先想到的是:如果后面跟着“\0xFF”,则在相应的(a)中查找“\0xFF”字符串,如果没有将后面的字节提取为IAC,则将“\0xFF\0xFF”替换为“\0xFF”(b)和回答。resp.Remove() 两个字符。

a 部分会起作用,但 b 部分是缺乏的。有几个命令包含超过 2 个字节。您将不得不做更多的工作并确定每个命令应该消耗多少字节。例如,SB 命令将包含可变数量的字节,具体取决于子选项是什么。

于 2012-12-21T17:32:42.910 回答