C++ Exercises(十六)---Ethernet帧包结构解析

本文介绍了如何使用C++编写一个Ethernet帧解析器。通过定义`CFrame`类来存储帧信息,包括帧序号、前导码、帧前定界符、目的地址、源地址、帧类型、数据域和CRC校验码。同时,`CFrameParser`类负责读取帧数据文件并解析每个帧,检查帧的有效性。解析过程中,通过CRC校验确保数据的正确性。
摘要由CSDN通过智能技术生成

复制代码

/

///帧信息类 

/

class CFrame

{

public:

    CFrame(void);

    ~CFrame(void);

    void setSerialNumber(int nSN);

    void setPreCode(const string& strPreCode);

    void setPreBoundCode(const string& strBoundCode);

    void setEtherType(const string& strEtherType);

    void setData(char* strData,int len);

    void setCRC(const string& strCRC);

    void setFrameState(bool isValid);

    void setDstAddress(const string& desAddress);

    void setSrcAddress(const string& srcAddress);

private:

    int nFrameSN;// 帧序号

    string strPreCode;//前导码

    string strPreBoundCode;//帧前定界符

    string strDstAddress;//目的地址

    string strSrcAddress;//源地址

    string strEtherType;//帧类型

    string strData;//数据域

    string strCRC;//CRC校验码

    bool bIsValid;//是否正确的帧

    friend ostream& operator << (ostream& out,const CFrame& frame);

};

CFrame::CFrame(void)

{

    this->nFrameSN = -1;

    this->bIsValid = false;

    this->strEtherType = "";

    this->strCRC = "";

    this->strData = "";

    this->strDstAddress = "";

    this->strPreBoundCode = "";

    this->strPreCode = "";

    this->strSrcAddress = "";

}

CFrame::~CFrame(void)

{

}

void CFrame::setSerialNumber(int nSN)

{

    this->nFrameSN = nSN;

}

void CFrame::setPreCode(const string& strPreCode)

{

    this->strPreCode = strPreCode;

}

void CFrame::setPreBoundCode(const string& strBoundCode)

{

    this->strPreBoundCode = strBoundCode;

}

void CFrame::setEtherType(const string& strEtherType)

{

    this->strEtherType = strEtherType;

}

void CFrame::setData(char* strData,int len)

{

    this->strData = string(strData,len);

}

void CFrame::setCRC(const string& strCRC)

{

    this->strCRC = strCRC;

}

void CFrame::setFrameState(bool isValid)

{

    this->bIsValid = isValid;

}

void CFrame::setDstAddress(const string& desAddress)

{

    this->strDstAddress = desAddress;

}

void CFrame::setSrcAddress(const string& srcAddress)

{

    this->strSrcAddress = srcAddress;

}

复制代码


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值