-1

私は Omnet++ 4.6 を使用しており、AODVRouting を継承するクラスを作成しました。handleMessage()ここで、親クラスからオーバーライドする関数を新しいクラスに作成しました。コンパイラは、関数が実際にオーバーライドされていることを示しています。関数の開始をイベント ログに出力するコマンドを入力しましたEV<<が、イベント ログに出力されません。何が問題ですか??

親クラスの関数は仮想で保護されています。これは私の継承したclass.ccです:

//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
// 
// You should have received a copy of the GNU Lesser General Public License
// along with this program.  If not, see http://www.gnu.org/licenses/.
// 


#include "MalAODVRouter.h"
#include "IPv4ControlInfo.h"

Define_Module(MalAODVRouter);
MalAODVRouter::MalAODVRouter()
{
    AODVRouting::AODVRouting();
}
void MalAODVRouter::initialize(int stage)
{
    AODVRouting::initialize(stage);
}

void MalAODVRouter::handleMessage(cMessage *msg)
{
    std::cout<<"Mal Host Activity"<<endl;
    EV <<"Mal Host Activity \n";
    this->bubble("Mal Host Activity");


    //capturedMsgs++;
    //if (capturedMsgs==1) // One out of every 10 packets (frequency of replay)
    //{
        cMessage *ReplayMsg = msg->dup();
        std::cout<<"Done Duplicating MSG"<<endl;
        EV<<"Done Duplicating MSG \n";

        /*UDPPacket *udpPacket = dynamic_cast<UDPPacket *>(msg);
        AODVControlPacket *ctrlPacket = check_and_cast<AODVControlPacket *>(udpPacket->decapsulate());
        IPv4ControlInfo *udpProtocolCtrlInfo = dynamic_cast<IPv4ControlInfo *>(udpPacket->getControlInfo());
        ASSERT(udpProtocolCtrlInfo != NULL);
        IPv4Address sourceAddr = udpProtocolCtrlInfo->getSrcAddr();         //get Source Address
        IPv4Address destinationAddr = udpProtocolCtrlInfo->getDestAddr();   //get Destination Address
        IPv4Address addr = getSelfIPAddress();
        if (addr != destinationAddr)      // if it is not destined for "Eve"
        {
            UDPPacket *ReplayUDPPacket = udpPacket;
            AODVControlPacket *ReplayCtrlPacket = check_and_cast<AODVControlPacket *>(ReplayUDPPacket->decapsulate());
            IPv4ControlInfo *ReplayUDPProtocolCtrlInfo = dynamic_cast<IPv4ControlInfo *>(ReplayUDPPacket->getControlInfo());
            ASSERT(ReplayUDPProtocolCtrlInfo != NULL);
            ReplayUDPProtocolCtrlInfo->setSrcAddr(sourceAddr);          //Forge Source
            ReplayUDPProtocolCtrlInfo->setDestAddr(destinationAddr);    //Keep Destination

*/

            //we can add a delay before sending the copy of the message again (10 time units)
        scheduleAt(simTime() + 1, ReplayMsg);
        //sendDelayed(ReplayMsg, 0.1,"ipOut");
        ReplayedMsgs++;
        std::cout<<"Launched Replay Packet!\n";
        EV<<"Launched Replay Packet!\n";
        this->bubble("Attack");

            //this->capturedMsgs=0;
       // }
    //}
    AODVRouting::handleMessage(msg);
    std::cout<<"Finished handling msg"<<endl;
    EV<<"Finished handling msg"<<endl;

}

/*void MalAODVRouter::finish()
{

    recordScalar("captured Msgs", capturedMsgs);
    recordScalar("Replayed Msgs", ReplayedMsgs);

    }*/


MalAODVRouter::~MalAODVRouter()
{
    AODVRouting::~AODVRouting();
}

そして、これは私の .h ファイルです:

//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
// 
// You should have received a copy of the GNU Lesser General Public License
// along with this program.  If not, see http://www.gnu.org/licenses/.
// 

#ifndef __COPS_MALAODVROUTER_H_
#define __COPS_MALAODVROUTER_H_
#include "AODVRouting.h"
#include <omnetpp.h>


/**
 * TODO - Generated class
 */

class MalAODVRouter : public AODVRouting
{
protected:
    virtual void initialize(int stage) override;
    virtual void handleMessage(cMessage *msg) override;

public:
    MalAODVRouter();
    //finish();
    ~MalAODVRouter();
    int capturedMsgs=0;
    int ReplayedMsgs=0;

};

#endif
4

2 に答える 2

1

によって生成された独自のメッセージを表示するには、EVログ ビューアを「モジュール出力」モードに切り替える必要があります。シミュレーションを開始し、右下のウィンドウで一番右のアイコンを押します。

于 2015-10-17T21:52:27.817 に答える
0
  • クラスが登録されていることを確認してくださいマクロ >> Define_Module(....); があります。(出来たようです)
  • クラスがリンクされていることを確認してください >> 「-h classes」オプションを使用してシミュレーションを実行すると、シミュレーションに登録されているすべてのクラスの完全なリストを取得できるはずです
  • ned ファイル内の名前が構成ファイル cc と同じであることを確認します。
  • プロジェクトのフォルダを右クリックしてみてください プロパティ >> Omnet++ >> Makemake >> 適用
于 2016-11-17T14:36:32.460 に答える