在TcpClient.Read()中处理IAC字节

本文关键字:处理 IAC 字节 TcpClient Read | 更新日期: 2023-09-27 17:49:16

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

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

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

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

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

在TcpClient.Read()中处理IAC字节

首先想到的是:在resp (a)中找到"'0xFF"字符串,如果后面跟着"'0xFF",用"'0xFF"(b)替换"'0xFF'0xFF",如果不提取后面的字节作为IAC和答案。. remove()两个字符

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