1

ストリーム クラスを使用して、シリアル ポートとの間でデータを読み書きしたいと考えています。BaseStream を使用してストリームを取得します (以下のリンク) が、Length プロパティが機能しません。バイト数を知らずに完全なバッファを読み取る方法を知っている人はいますか?

http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.basestream.aspx

4

2 に答える 2

2

できません。つまり、持っているのがBaseStream.

すべてを受け取ったかどうかを確認するには、次の 2 つの方法があります。

  1. 長さワードをパケットの最初の 2 または 4 バイトとして送信します。それは何バイトが続くかを示しています。次に、リーダーはその長さの単語を読み取り、そのバイト数を読み取り、それが完了したことを認識します。
  2. レコード区切りに同意します。それはテキストに最適です。たとえば、ヌル バイトまたは行末文字がデータの終わりを示すと判断する場合があります。これを任意のバイナリ データで行うのはやや困難ですが、可能です。コメントを参照してください。

または、アプリケーションによっては、ある種のタイミングを行うことができます。つまり、X 秒 (またはミリ秒?) の間に新しいものを何も受信しなかった場合、すべてを受信したと見なします。これには、送信者が特に遅い場合にうまく機能しないという明らかな欠点があります。

于 2013-08-21T19:34:42.213 に答える