有时它正确地读取了11个字节数据,但是大多数情况下它显示未收到数据。收到的数据长度保持在变化上。
我想,我的评论实际上应该是一个答案,所以我们去:这里有几件事要解决,我将一一仔细研究它们。
serial I/o不是基于消息的
它是基于流的。也就是说:您阅读的是字节流。这意味着您无法期望根据某些应用程序特定的协议读取完整的消息。
您需要确保通过将其明确编码到协议来确保您获得完整的消息。 通常,这是通过阅读到累积的缓冲区中完成的,直到检测到一条(或更多)完整消息。如果是这样的话,将在清洁缓冲区时裁剪并传递该消息(虽然不是太多),然后再返回阅读。
结构长度与可变长度消息字段
temimiter字节 您使用的是“ $”和“#”。这并不是天生的错误,但是我想让您意识到ASCII中的eardeMessagetexiter(该消息已扩展到Unicode,也扩展到ISO-8859-1)。如果您正在编写该协议,则可以利用这些协议,而无需放弃“ $”和“#”字符作为内容。