在特定门omnet ++上发送数据包

时间:2015-09-22 07:39:14

标签: omnet++

在编程tic toc的omnet ++中,如果有三个节点并且所有节点都相互连接,那么如何将tic toc消息发送到特定节点。例如,我想先将消息发送到节点A,然后发送节点B,然后发送节点C;我将如何编码呢。

#include <string.h>
#include <omnetpp.h>

int x=0;

class computerf : public cSimpleModule
{
  protected:

    virtual void initialize();
    virtual void handleMessage(cMessage *msg);virtual void forwardMessage(cMessage *msg);
};

Define_Module(computerf);


void computerf::initialize()
{

    if (strcmp("computer1", getName()) == 0)
    {

        cMessage *msg = new cMessage("tictocMsg");
        forwardMessage(msg);
    }
}

void computerf::handleMessage(cMessage *msg)
{

    {
    forwardMessage(msg);
    }

}

void computerf::forwardMessage(cMessage *msg)
{
    // In this example, we just pick a random gate to send it on.
    // We draw a random number between 0 and the size of gate `out[]'.
    int n = gateSize("out");
        int k = intuniform(0,n-1);

        EV << "Forwarding message " << msg << " on port out[" << k << "]\n";
        send(msg, "out", 1);

    EV <<"n is  "<<n;


}

这里的代码forwardMessage函数在随机门上发送消息,但我想在特定的门上发送消息。

这是.ned文件

simple computer
{
    gates:
        input in[2];
        output out[2];


}

//
// TODO documentation
//
network Network
{
    @display("bgb=545,242");
    submodules:
        A: computer {
            @display("p=52,86");
        }
        B: computer {
            @display("p=311,83");
        }
        C: computer {
            @display("p=175,189");
        }
    connections:

        A.out[0] --> B.in[0];
        B.out[0] --> A.in[0];


        A.out[1] --> C.in[1];
        C.out[1] --> A.in[1];


        C.out[0] --> B.in[1];
        B.out[1] --> C.in[0];
}

基本上我希望节点A向节点C和节点A发送消息以同时向节点B发送消息 如果我使用hanlde消息功能 void computer :: handleMessage(cMessage * msg) {

send(msg, "out",0); //send(msg, "out",0);

} 现在这里发送(msg, “out” ,0);我想指定哪个“out”我想要发送消息到节点C然后发送到节点B但是如何?

2 个答案:

答案 0 :(得分:2)

send(msg, "gate", index)的第三个参数是在矢量门上发送消息时可以使用的实际门控索引。根据您的NED文件,send(msg, "out",0);会将消息发送给B,而send(msg, "out",1);会将消息发送给C.

答案 1 :(得分:-1)

您需要在您的ned文件中创建这些门:

RecyclerView

使用此功能您可以发送以下消息:

simple Txc
{
    parameters:
        @display("i=block/routing"); // add a default icon
    gates:
        input in1;
        output out1;
        input in2;
        output out2;
}

network Tictoc
{
    submodules:
        tic: Txc {
            parameters:
                @display("i=,cyan"); 
        }
        toc: Txc {
            parameters:
                @display("i=,cyan");  
        }
        toctic: Txc {
            parameters:
                @display("i=,cyan");  
        }
    connections:
        tic.out --> {  delay = 100ms; } --> toc.in;
        tic.in <-- {  delay = 100ms; } <-- toc.out;


        toctic.out2 --> {  delay = 100ms; } --> toc.in2;
        toctic.in2 <-- {  delay = 100ms; } <-- toc.out2;
 //....
}

希望这有帮助。

最佳