我目前正在模拟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中的一些数据。请赐教,谢谢。
答案 0 :(得分:0)
参数packetName
用于创建有效负载的名称。看看UDPBasicApp::sendPacket()
:
void UDPBasicApp::sendPacket()
{
std::ostringstream str;
str << packetName << "-" << numSent;
ApplicationPacket *payload = new ApplicationPacket(str.str().c_str());
// ...
为了获得收到的数据包或消息的名称,可以使用getName()
方法。