Omnet++ 如何将消息发送回指定节点?
我在内德用一个入口门。我的网络由n个简单模块组成,这些模块以对等方式相互连接在一起。我的问题是: 假设其中一个简单模块接收到一条消息。如何编写“handleMessage”以便将消息发送回相关门的消息源?如果我需要使用“getArrivalGateId”,请让我知道如何准确使用它?此方法不起作用:Omnet++ 如何将消息发送回指定节点?,omnet++,Omnet++,我在内德用一个入口门。我的网络由n个简单模块组成,这些模块以对等方式相互连接在一起。我的问题是: 假设其中一个简单模块接收到一条消息。如何编写“handleMessage”以便将消息发送回相关门的消息源?如果我需要使用“getArrivalGateId”,请让我知道如何准确使用它?此方法不起作用: 'send(msg, "gate$o",getArrivalGateId());' Ned代码如下: simple TX1 { gates: inout gate[]; }
'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());
不客气。由于您是新用户,请接受有关堆栈溢出的正确答案,以便其他用户可以查看问题是否得到正确解决。