Omnet++ 如何将消息发送回指定节点?

Omnet++ 如何将消息发送回指定节点?,omnet++,Omnet++,我在内德用一个入口门。我的网络由n个简单模块组成,这些模块以对等方式相互连接在一起。我的问题是: 假设其中一个简单模块接收到一条消息。如何编写“handleMessage”以便将消息发送回相关门的消息源?如果我需要使用“getArrivalGateId”,请让我知道如何准确使用它?此方法不起作用: 'send(msg, "gate$o",getArrivalGateId());' Ned代码如下: simple TX1 { gates: inout gate[]; }

我在内德用一个入口门。我的网络由n个简单模块组成,这些模块以对等方式相互连接在一起。我的问题是: 假设其中一个简单模块接收到一条消息。如何编写“handleMessage”以便将消息发送回相关门的消息源?如果我需要使用“getArrivalGateId”,请让我知道如何准确使用它?此方法不起作用:

'send(msg, "gate$o",getArrivalGateId());'
Ned代码如下:

 simple TX1
{
    gates:
        inout gate[];
}

network Network
{
    submodules:
        drain: TX1 {
            @display("p=143,104");
        }
        tic: TX1 {
            @display("p=143,23");
        }
        pong: TX1 {
            @display("p=235,104");
        }
        toc: TX1 {
            @display("p=143,185");
        }
        ping: TX1 {
            @display("p=47,104");
        }
    connections:
        tic.gate++ <--> drain.gate++;
        pong.gate++ <--> drain.gate++;
        drain.gate++ <--> toc.gate++;
        drain.gate++ <--> ping.gate++;
}
    #include <stdio.h>
#include <string.h>
#include <omnetpp.h>
using namespace omnetpp;


class TX1 : public cSimpleModule
{

  protected:
    virtual void initialize();
    virtual void handleMessage(cMessage *msg);
};

Define_Module(TX1);

void TX1::initialize()
{
    if (strcmp("tic", getName()) == 0)
    {
        cMessage *msg = new cMessage("Message");
      // int n = gateSize("gate");
                         send(msg, "gate$o", 0);
               }
}

void TX1::handleMessage(cMessage *msg)
{
    send(msg, "gate$o",msg->getArrivalGateId());
}
tic模块将该信息发送至排水管,排水管应仅将该信息发送回tic,而非其他模块。源文件如下所示:

 simple TX1
{
    gates:
        inout gate[];
}

network Network
{
    submodules:
        drain: TX1 {
            @display("p=143,104");
        }
        tic: TX1 {
            @display("p=143,23");
        }
        pong: TX1 {
            @display("p=235,104");
        }
        toc: TX1 {
            @display("p=143,185");
        }
        ping: TX1 {
            @display("p=47,104");
        }
    connections:
        tic.gate++ <--> drain.gate++;
        pong.gate++ <--> drain.gate++;
        drain.gate++ <--> toc.gate++;
        drain.gate++ <--> ping.gate++;
}
    #include <stdio.h>
#include <string.h>
#include <omnetpp.h>
using namespace omnetpp;


class TX1 : public cSimpleModule
{

  protected:
    virtual void initialize();
    virtual void handleMessage(cMessage *msg);
};

Define_Module(TX1);

void TX1::initialize()
{
    if (strcmp("tic", getName()) == 0)
    {
        cMessage *msg = new cMessage("Message");
      // int n = gateSize("gate");
                         send(msg, "gate$o", 0);
               }
}

void TX1::handleMessage(cMessage *msg)
{
    send(msg, "gate$o",msg->getArrivalGateId());
}
任何人都可以更正这个简单的代码,以便将消息发送回消息源吗? 我确实提前感谢你

send(msg, "gate$o",msg->getArrivalGateId());
对于此调用,必须指定gate index而不是gate id作为第三个参数,因此正确的调用应该是:

send(msg, "gate$o",msg->getArrivalGate()->getIndex());

不客气。由于您是新用户,请接受有关堆栈溢出的正确答案,以便其他用户可以查看问题是否得到正确解决。