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

最初に頭に浮かぶのは、次のとおりです。respで「\ 0xFF」文字列を検索します(a)「\ 0xFF」が続く場合、「\ 0xFF \ 0xFF」を「\ 0xFF」に置き換えます(b)後続のバイトをIACとして抽出しない場合、および答え。resp.Remove() 2文字。

部分 a は動作しますが、部分 b が欠けています。2 バイトを超えるコマンドがいくつかあります。さらに作業を行い、各コマンドが消費するバイト数を決定する必要があります。たとえば、SB コマンドには、サブオプションの内容に応じて可変数のバイトが含まれます。

于 2012-12-21T17:32:42.910 に答える