zoukankan      html  css  js  c++  java
  • 协议分析器最终设计版本

    类图:


    内容用的不少,最终没有继续使用指针赋值的方法,而是牺牲了一点效率规规矩矩地设计了一系列类,利用了多态。 在性能与设计的取舍上,
    我偏向于设计多一点,这个具体情况具体分析好了……
    
    
    在最终的调用上就有了很大的简化:
     
    void Packet::analyzePacket(const Byte *packet)
    {
    EtherHeader *ethHeader =NULL;
    IPHeader *ipHeader =NULL;
    Header *header =EtherHeader::getInstance(packet);
    protoName =header->getNextProtocolName();

    ethHeader =dynamic_cast<EtherHeader*>(header);
    if(ethHeader) {
    dstAddr =ethHeader->getDstMACAddrAsString();
    srcAddr =ethHeader->getSrcMACAddrAsString();
    }else {
    Exception e("Type cast failed while trying type EtherHeader*");
    throw e;
    }

    header =header->getNextHeader();
    while(header) {
    if((ipHeader =dynamic_cast<IPHeader*>(header)) !=NULL) {
    dstAddr =ipHeader->getDstAddrAsString();
    srcAddr =ipHeader->getSrcAddrAsString();
    }
    protoName =header->getNextProtocolName();
    header =header->getNextHeader();
    }
    }

    这样调用的代码就相对清爽了许多,而且不会产生过多的解析实例。调用代码同时考虑了协议报头的个性(最终显示出来的源目的地址,如果有IP协议则应显示IP地址,如只有MAC地址则显示MAC地址)和共性(都是分析出下一个协议名,同时获得下一个协议头的指针)。

  • 相关阅读:
    783. Minimum Distance Between BST Nodes
    290. Word Pattern
    155. Min Stack
    HDU 6069 Counting Divisors (素数+筛法)
    BZOJ 2038 小Z的袜子(hose) (莫队算法)
    HDU 6127 Hard challenge (极角扫描)
    HDU 6096 String (AC自动机)
    LightOJ 1268 Unlucky Strings (KMP+矩阵快速幂)
    CodeForces 219D Choosing Capital for Treeland (树形DP)
    ZOJ 3201 Tree of Tree (树形DP)
  • 原文地址:https://www.cnblogs.com/qianyuming/p/2432935.html
Copyright © 2011-2022 走看看