2017-08-17 29 views
0

我目前正在模擬AODV路由,並且與數據包封裝/解封裝非常混淆。 在UDPBasicAPP.CC,有一個叫packetName來定義一個數據包的名稱變量(從INI文件中定義)如何解封數據包以獲取AODVRouting.CC中的UDPBasicApp數據包名稱?

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

參數packetName用於創建有效負載的名稱。看UDPBasicApp::sendPacket()

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

爲了獲得接收的分組或消息中的一個可以使用getName()方法的名稱。

相關問題