1

I want to use the stream class to read/write data to/from a serial port. I use the BaseStream to get the stream (link below) but the Length property doesn't work. Does anyone know how can I read the full buffer without knowing how many bytes there are?

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

4

2 回答 2

2

你不能。也就是说,如果您只有BaseStream.

有两种方法可以知道您是否已收到所有内容:

  1. 发送一个长度字作为数据包的前 2 或 4 个字节。这表示将跟随多少字节。然后,您的读者会读取那个长度的字,读取那么多字节,并且知道它已经完成了。
  2. 同意记录分隔符。这对文本很有用。例如,您可能决定空字节或行尾字符表示数据结束。对于任意二进制数据,这有点困难,但可能。见评论。

或者,根据您的应用程序,您可以进行某种计时。也就是说,如果您在 X 秒(或几毫秒?)内没有收到任何新内容,则您认为您已收到所有内容。如果发件人速度特别慢,这有一个明显的缺点,那就是不能很好地工作。

于 2013-08-21T19:34:42.213 回答
0

也许您可以尝试 SerialPort.BytesToRead 属性。

于 2013-08-21T19:30:58.283 回答