通信协议设计注意事项

Posted xuexiaodong2009

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通信协议设计注意事项相关的知识,希望对你有一定的参考价值。

设计自定义通信协议有几个需要注意的情况:

  1回执问题

   2防堵塞设计

  3超时


  1回执问题

     为了准确获取下发的命令的后续执行情况,就必须设计一种机制反馈命令的执行情况。例如手机短信可以开启短信是否发送成功的的提示。这其实就是一种回执,由于是异步的,自然不能使用返回值之类的简单方法了。当然还有更复杂的设计例如,下发一个修改时间的命令,下位机是否收到命令,时间是否修改成功,就需要两类回执,一类是下位机是否收到命令,一类是时间是否修改成功。

  为了表示是一个整体过程,则需要把把这几类命令串联起来,设计思想其实有点想web程序的session,整个过程需要一个编号,表示是一个命令的执行过程的一部分。如果发送了两条修改时间的命令,返回一条修改成功的回执,如何知道是哪一次的修改成功呢?因此设计的命令session就应该解决此类问题。根据发送命令的时间和设备编号生成 session 编号。

  2防堵塞设计

   有时为了防止硬件故障,或者软件错误,导致反复发送一条命令,进而导致整个系统故障,需要设计防堵塞设计,给每一个命令根据时间生成一个编号。这样既可以区分同一个命令,又可以避免故障。

  3超时

   既然是异步,命令的执行结果不能马上知道,必然需要处理超时,例如发送了一条设置时间命令,只收到了下位机收到命令的回执,但没有收到是否执行成功的回执,如何知道时间是否修改成功。这就需要设计超时,超过一定时间没有回执,则认为命令执行失败。具体时间应该有多大,就要根据实际情况了。


 private static DateTime lastTimeStamp = DateTime.Now;

        public static string CreateQn()
            var time = DateTime.Now;
            if (time <= lastTimeStamp)
                time = lastTimeStamp += TimeSpan.FromMilliseconds(1);
                return time.ToString("yyyyMMddHHmmssfff");
            
            lastTimeStamp = time;
            return time.ToString("yyyyMMddHHmmssfff");
        




以上是关于通信协议设计注意事项的主要内容,如果未能解决你的问题,请参考以下文章

can通信系统是啥意思

HTTP协议通信过程细节

手写RPC,深入底层理解整个RPC通信

数据链路层协议

2017-2018-1 《信息安全系统设计基础》实验五 通信协议设计

苹果内购服务器验证凭证回执Data