【问题标题】:C# COM Messaging system designC# COM 消息系统设计
【发布时间】:2011-02-24 14:10:42
【问题描述】:

我可以使用一些帮助来设计我的 COMport 连接类。

我有一个带有微控制器(我已编程)的设备连接到我的 comport。 每当我向它发送消息时,它都应该发送确认。

因此,每当我通过 comport 发送内容时,它应该等待确认后再继续。 当然,我不想要 while(!ack) wait() 这样的东西。

当 1 秒左右没有收到 ack 时,它应该再次发送命令。 每种命令的 Ack 看起来都不同(注意:只有类型,没有特定于消息的 id)。 连接的设备还会发送消息(ACK 除外),这些消息需要由应用程序自己处理。

是否有人对解决此问题的简单灵活方法(可能是设计模式?示例?)提出建议?

【问题讨论】:

    标签: c# oop multithreading message-queue


    【解决方案1】:

    您可能需要一个专用线程来处理通信。您需要一个队列,客户端代码可以在该队列上推送消息,并使用 ReaderWriterLockSlim 保护它。不需要 DataReceived 事件,直接调用 SerialPort.Read() 即可。使用 ReadTimeout 属性检测超时。如果您收到需要返回客户端代码的响应,请使用事件。

    小心设计协议,要做到正确并不容易。您将使用您的方案防止字节丢失,但 ACK 丢失的可能性同样大。微控制器将两次看到相同的命令。现在您需要一个“消息编号”来抑制重复,以及一种让两端同步它们的方法。看看 RFC 916。

    【讨论】:

    • 非常感谢,您似乎完全明白我在说什么。我认为我没有足够的经验来使用专用线程等进行制作(我需要一些示例),您只是给了我正在寻找的关键字:“异步”。现在更多的谷歌搜索应该对我有帮助:)谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多