通讯过程中连包分包问题的解决

博主按: 本来是打算发到什么期刊上面骗点稿费的. 所以, 虽然东西很简单, 但写到很详细. 可是我发过去. 就象石沉大海一般. 连一个确认的 mail 都没有. 郁闷. 还是发表在自己的 blog 上吧. 呵呵. 在这里我说了算. 这里插入图片比较麻烦. 所以, 想要看代插图的完整版, 请下载 doc 文件:

http://nicoster.googlepages.com/packetextractor.rar

 

摘要 通讯协议的处理过程中往往要处理连包, 分包的问题. 本文实现了一个轻巧的 PacketExtractor , 运用分层的思想, 结合模板, 虚函数等技巧. 让用户只需要简单的派生自己的类, 重载 4 个方法, 即可轻松完成拆包组包的任务. 给通讯过程中的连包问题提供了一个普适的解决方案.

 

关键字 通讯 协议 连包 粘包 分包 组包 虚函数 模板 PacketExtractor

 

引言

所谓连包, 分包问题. 比如说. 根据通讯协议, 发送了两条命令. 第一条命令 80 字节. 第二条命令 120 字节. 但接受方收到数据的时候, 可能第一次收到 150 个字节. 第二次收到 50 个字节. 要正确理解发送方的命令包. 接受方必须根据协议正确的从第一包数据中取出前 80 个字节. 作为一条命令, 再把剩下的 70 个字节和第二包的数据组合成第二条命令. 这个问题如此常见. 以致于实现一个可以复用的, 轻量级的解析器就变得很有必要. 于是就有了这个 PacketExtractor . PacketExtractor C++  实现, 运用分层的思想. 结合模板, 虚函数等技术. 让使用者只需要重载几个函数, 就可以完美的解决在通讯过程中的拆包, 组包的问题.

 

设计思路

PacketExtractor 的算法其实很朴素.

在收到一包数据之后, 先查找包头特征字(比如 7e), 一般的, 协议中都有一个包长字段. 将包头作为包的起始字节, 找到包长. 如果收到的包还不够包长指定的长度, 则将包放到一个缓冲区. 等下一包数据到的时候, 将这次的半包附加到收到数据前面. 递归调用处理函数. 如果收到的数据已经够一包的长度了. 则根据协议取出校验字段. 对包进行校验. 如果通过. 则证明是一个合法包.

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在建筑工程分包管理是一个非常重要的环节,它涉及到项目的进度、质量、成本等多个方面。在分包管理过程,也存在着一些风险,需要进行有效的防控,以保证项目的顺利进行。 以下是分包管理过程的一些风险及防控措施: 1. 分包商实力风险:选择实力弱劣的分包商可能会导致施工质量下降、工期延误等问题。因此,在选择分包商时,应该进行充分的调查和评估,选择实力雄厚、信誉良好的分包商。 2. 价格风险:分包商报价过高或过低都存在一定的风险。如果报价过高,可能会导致项目成本过高;如果报价过低,则可能会导致分包商无法按时完成任务,甚至出现质量问题。因此,在选择分包商时,应该进行市场调研,了解市场行情,确保合理的报价。 3. 工期风险:分包商无法按时完成任务会导致整个项目的工期延误。为了防止这种情况的发生,应该在合同明确规定工期,并设置相应的惩罚措施,以确保分包商能够按时完成任务。 4. 质量风险:选择技术不过关的分包商或者对分包商的管理不到位,都会导致施工质量问题。因此,在选择分包商时,应该注重技术能力,并对分包商进行严格的管理和监督,确保施工质量符合要求。 5. 安全风险:分包商在施工过程可能会存在安全隐患,如高空作业、电气作业等。为了防止安全事故的发生,应该对分包商的安全管理进行严格的监督和检查,确保施工安全。 总之,在分包管理过程,需要对分包商进行全面的评估,选择实力雄厚、信誉良好、技术过硬的分包商,并对分包商进行严格的管理和监督,以确保项目的顺利进行。同时,也需要制定相应的风险防控措施,确保分包管理过程的各种风险得到有效的防控。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值