2017-08-17 7 views
0

私は現在、AODVルーティングをシミュレートしており、パケットのカプセル化/カプセル化と非常に混同しています。 UDPBasicAPP.CCで は、だから、AODVRouting.CCを通過したパケットと、それがカプセル化されたAODVRouting.CCでUDPBasicAppのパケット名を取得するためにパケットをどのようにカプセル化解除するのですか?

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

(INIファイルから定義する)パケットの名前を定義するためにpacketNameという変数があります:

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クラスがアクセスするすべての機能を持っていないパケットをカプセル化解除された後に/ packetName値を取得することを見つける

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

。私はそのような機能を提供してくれた他のクラスが何であるか分かりません。 AODVRouting.CCのデータを操作するためにpacketNameを取得する必要があります。私に教えてください、ありがとう。

答えて

0

パラメータpacketNameは、ペイロードの名前を作成するために使用されます。 UDPBasicApp::sendPacket()を見てください:

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

1はgetName()メソッドを使用することができ、受信したパケットまたはメッセージの名前を得るために。

関連する問題