繁体   English   中英

如何从SerialPort.BaseStream读取没有长度的字节

[英]How to read bytes from SerialPort.BaseStream without Length

我想使用流类从串行端口读取/写入数据。 我使用BaseStream获取流(下面的链接),但是Length属性不起作用。 有谁知道我如何在不知道有多少字节的情况下读取完整的缓冲区?

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

你不能 也就是说,如果您拥有的只是BaseStream ,则不能保证已收到一切。

您可以通过两种方式知道是否已收到一切:

  1. 发送长度字作为数据包的前2或4个字节。 那表示将要跟随多少字节。 然后,您的阅读器将读取该长度的单词,读取那么多字节,并且知道已完成。
  2. 同意记录分隔符。 这对文本非常有用。 例如,您可能决定空字节或行尾字符表示数据结束。 使用任意二进制数据很难做到,但有可能。 见评论。

或者,根据您的应用程序,您可以执行某种计时。 也就是说,如果您在X秒(或毫秒?)内没有收到任何新消息,则认为您已经收到了所有消息。 如果发件人特别慢,那显然有不能正常工作的缺点。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM