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地址)和共性(都是分析出下一个协议名,同时获得下一个协议头的指针)。

  • 相关阅读:
    mkdosfs 安装
    块设备驱动程序-内存盘
    usb驱动程序小结(六)
    usb的hid鼠标键盘报告描述符(五)
    usb输入子系统写程序(三)
    usb输入子系统键盘(四)
    usb描述符简述(二)
    linux usb总线驱动(一)
    linux 触摸屏驱动
    lcd驱动框架
  • 原文地址:https://www.cnblogs.com/qianyuming/p/2432935.html
Copyright © 2011-2022 走看看