You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OMNeT++中如何回复根节点报文同时仅向子节点发消息避免误发至根

你当前的代码在发送l2消息时会遍历所有out出口,包含了通往根节点的出口,只需要排除该出口即可,修改步骤如下:

  1. 调整senderId的作用域,将其定义在处理确认报文的逻辑外层,方便后续发送新消息时调用
  2. 发送l2消息的循环中,跳过对应根节点的出口索引

修改后的完整代码如下:

// 先定义senderId,初始值设为无效值-1
int senderId = -1;
cGate * sender = msg->getSenderGate();
for (cModule::GateIterator i(this); !i.end(); i++)
{
    cGate *gate = i();
    std::string gateStr = gate->getName();
    if (gateStr == "out" && gate->getPathEndGate()->getOwnerModule() == sender->getOwnerModule() )
    {
        senderId = gate->getIndex();
        cMessage *reply=new cMessage("reply");
        send(reply, "out", senderId);
    }
}

// 发送l2消息时跳过senderId对应的出口
for (int i = 0; i < gateSize("out"); i++) {
    // 跳过通往根节点的出口
    if (i == senderId) continue;
    cMessage *l2 = new cMessage ("l2");
    send(l2, "out", i);
}

上述代码中senderId对应的就是你收到消息时,通往消息发送方(根节点/父节点)的出口索引,发送新消息时直接跳过该索引即可避免把l2消息发往根节点,同时不影响向其他子节点发送消息。

内容的提问来源于stack exchange,提问作者hzeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:24:03