我正在使用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
之后?
答案 0 :(得分:0)
我首先想到的是:在resp(a)中找到“\ 0xFF”字符串,如果后跟“\ 0xFF”,则将“\ 0xFF \ 0xFF”替换为“\ 0xFF”(b)如果不提取后续字节作为IAC和答案。 resp.Remove()两个字符。
部分a会起作用,但缺乏b部分。有几个命令由2个以上的字节组成。您将不得不做更多的工作并确定每个命令应该消耗多少字节。例如,SB命令将包含可变数量的字节,具体取决于子选项的内容。