現在、VisualStudio2015 のWindowsフォームアプリケーションにてソケットを使用したシリアル通信のコードを書いています。
基本的な通信(送受信)はできるようになったのですが、受信メソッドにて
C#
1 //受信データのバイト数分蓄積 2 do 3 { 4 int length = ComPort.Read(buffer, readlen, rbyte - readlen); 5 readlen += length; 6 } while (readlen < rbyte); 7 recData += System.Text.Encoding.ASCII.GetString(buffer); 8 logText(recData, ComPort);
これで送られてきたByteをそのバイト分貯めてから
文字列に変換してテキストボックスにinvokeして書き込んでいますが、受信時にデータが分割されて送られてしまいます。
なので改行まで取得するように改良して以下のようにしました。
C#
1 // 受信データを改行まで蓄積 2do 3{ 4 int length = ComPort.Read(buffer, readlen, rbyte - readlen); 5 readlen += length; 6} while (readlen < rbyte); 7 recData += System.Text.Encoding.ASCII.GetString(buffer); 8 newline = recData.IndexOf(Environment.NewLine); 9if (newline >= 0) 10{ 11 logText(recData, ComPort); 12} 13else 14{ 15 Sendbuffa += recData; //データをいったん保存 16}
ですが、これだと一度の2回送信分のデータ(改行コードがふたつある)を受信してしまったときに、
1回送信分の中に改行コードが2つあると判断されてしまいます。
なので、改行コードを見つけたらその時点でテキストボックスに書きだしたいのですが、どう修正すればよいでしょうか。
尚、上記両コードとも表記したコードをCOMポート接続されている間ループさせております。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/13 03:46
2018/04/13 04:00
退会済みユーザー
2018/04/13 07:49