如何解封包以在AODVRouting.CC中获取UDPBasicApp的包名?

时间:2017-08-17 16:16:14

标签: omnet++ inet

我目前正在模拟AODV路由,并且与数据包封装/解封装相当混淆。 在UDPBasicAPP.CC中,有一个名为packetName的变量来定义数据包的名称(从INI文件定义)

void UDPBasicApp::initialize(int stage)
{
packetName = par("packetName");
}

因此,一旦数据包通过AODVRouting.CC,它就被封装了:

 void AODVRouting::receiveSignal(cComponent *source, simsignal_t signalID, cObject *obj, cObject *details)
{
cPacket *frame = check_and_cast<cPacket *>(obj);
datagram = dynamic_cast<INetworkDatagram *>(frame->getEncapsulatedPacket());
}

我想再次对数据包进行解封装,以便检索上面提到的packetName值。代码如下:

UDPPacket *testData  = check_and_cast<UDPPacket *>(frame->decapsulate());

但是,我发现UDPPacket类在解封装数据包后没有任何访问/检索packetName值的函数。我不确定能提供这种功能的其他课程。我需要获取packetName来操作AODVRouting.CC中的一些数据。请赐教,谢谢。

1 个答案:

答案 0 :(得分:0)

参数packetName用于创建有效负载的名称。看看UDPBasicApp::sendPacket()

void UDPBasicApp::sendPacket()
{
    std::ostringstream str;
    str << packetName << "-" << numSent;
    ApplicationPacket *payload = new ApplicationPacket(str.str().c_str());
    // ...

为了获得收到的数据包或消息的名称,可以使用getName()方法。