私は、RS-232 経由でモジュールと通信するデバイスを一方の端に持つシステムを持っています。モジュールは TCP 経由で PC に接続され、TCP メッセージを RS-232 に、またはその逆に変換します。
これは私がそれを行う方法です:
- ストリーム上のすべてのバイトを読み取ります
- 文字列を構築する
- 文字列の後半部分を区切り文字と比較します
- 次に、ストリームの読み取りを停止します (ここには示されていませんが、イベントを発生させます)。
これを処理するための私の現在のコードは
string delimiter = "\r\n";
byte[] reply = new byte[1];
string replyString = string.Empty;
bool readOk = true;
int dl = delimiter.Length;
bool delimiterReached = false;
do
{
try
{
stream.Read(reply, 0, 1);
}
catch (Exception e)
{
readOk = false;
break;
}
replyString += Encoding.ASCII.GetString(reply, 0, reply.Length);
int rl = replyString.Length;
if (rl > dl)
{
string endString = replyString.Substring(rl-dl, dl);
if (endString.Equals(delimiter))
delimiterReached = true;
}
} while (!delimiterReached);
はどこstream
ですかTcpClient.GetStream()
一定の文字列の構築はあまり気にしないので、これを行うためのより良い方法があるかどうか疑問に思っていましたか?