- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:.NETのシリアルポートの送信で困っています)
.NETのシリアルポートの送信で困っています
このQ&Aのポイント
- WindowsXP、C#、.NET Framework 2.0の環境で、rs232cを使用してデータを別のPCのアプリと送受信するプログラムを作成しています。
- System.IO.Ports.SerialPort クラスを使用しており、通常は問題なく送受信できます。しかし、10240バイトのデータを送信すると受信側が4096バイトしか受信できません。
- SerialPort.Writeメソッドで送信し、WriteBufferSizeとReadBufferSizeの設定も変更していますが、問題の解決には至っていません。設定を変更するべき箇所があるのか、教えていただけませんか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#214300
回答No.1
外れてるかも知れませんが、シリアルのバッファは10kバイトも取れなかったと思います。 4096バイトずつ受信するようにプログラムを変更されてはいかがでしょうか。 (自分は以前、シリアルで1024バイトずつ受信して、別に用意した大きいバッファに逐次溜めていき、一連のデータストリームを再現するようなプログラムを組んだことはあります)
その他の回答 (1)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
回答No.2
Write () メソッドを実行した後すぐにClose() してませんか? 10kバイトのデータを送信し終わるにはそれなりの時間がかかります。(9600ボーの場合で約10秒) Close() を実行すると途中でも送信を中断します。
質問者
補足
いいえ、closeはユーザが画面から切断するボタンを押下しない限り、closeしないようにしています。DataReceived を利用して、常に送受信をタイムリーに行うような作りにしています。
補足
>シリアルのバッファは10kバイトも取れなかった 実は受信側のプログラムは10kを受信できている実績があるそうです。 仰せの通り、受信側のプログラムはシリアルポートの特性で分割してデータが送られることを想定して全データがそろうまでためている作りになっているとのことでした。 そうすると、送信側もデータ量が多い時は、プログラムで意図的に分割して送ればいいのかもしれないですね。ヒントを与えて下さってありがとうございます!試してみます。