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

时间:2012-12-21 17:26:18

标签: c# buffer bytearray ascii tcpclient

我正在使用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包含读取字节。我想在buf中提取(并稍后回答)IAC命令,而不是在resp中。你有一个有效的建议方式吗?

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

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

1 个答案:

答案 0 :(得分:0)

  

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

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