使用Omnet ++中的节点索引直接发送消息

时间:2016-02-02 13:50:45

标签: omnet++

我有一个包含36 lcn的网络拓扑。其中一个大约在network topology中有42个传感器节点。感知数据后我想将数据发送到gcn。为此,数据必须跳到lcn到lcn我使用gate做了这个。我只是转发数据包。但是我想直接将数据包发送到指定的中继节点。当我输入时;

 send(packet,"lcnIO$", 7); 

它通常给出门大小错误,因为最大门大小是8.我怎么能实现这一点。我的意思是我想从lcn 0直接发送数据包到lcn 7.它们之间有对角线连接。

1 个答案:

答案 0 :(得分:0)

send命令可用于仅通过给定索引的自己的门发送消息。 没有简单的方法从索引选择的节点向量向一个节点发送消息。
我建议你检查每个连接结束时的模块索引。此外,您必须考虑到节点可能没有与索引选择的节点的连接。
假设:

  • lcn节点中的输出门称为out
  • 输出门out是向量
  • 该节点希望将packet发送到lcn选择的destIndex节点

你可以使用这段OMNeT++代码:

const char * gateName = "out";
int destIndex = 7; // index of destination lcn
cGate *destGate = NULL;
bool found = false;

int i = 0;
int gateSize = gate(gateName, 0)->size();

do {
    destGate = gate(gateName, i++);
    cGate *nextGate = destGate->getNextGate();
    if (nextGate && nextGate->getOwnerModule()->getIndex() == destIndex) {
        found = true;
        send(packet, destGate);
    }
} while (!found && i < gateSize);
// here: found equals to false means that a packet was not sent