Omnet++ 如何找出从每个发送方收到的数据包数

Omnet++ 如何找出从每个发送方收到的数据包数,omnet++,inet,Omnet++,Inet,在带有INET框架的OMNET++中,我想知道从每个发送节点接收到多少数据包。谁能告诉我下面代码中“it->second++”命令的功能是什么 std::map<L3Address, uint64_t> recPkt; auto it = recPkt.find(senderAddr); if (it == recPkt.end()) recPkt[senderAddr] = 1; else it->second++; std::map recPkt; aut

在带有INET框架的OMNET++中,我想知道从每个发送节点接收到多少数据包。谁能告诉我下面代码中“it->second++”命令的功能是什么

std::map<L3Address, uint64_t> recPkt;
auto it = recPkt.find(senderAddr);
if (it == recPkt.end())
    recPkt[senderAddr] = 1;
else
    it->second++;
std::map recPkt;
auto it=recPkt.find(senderAddr);
if(it==recPkt.end())
recPkt[senderAddr]=1;
其他的
it->second++;

另外,任何人都可以建议如何显示每个节点收到的数据包数。

它是
std::map
元素的迭代器。迭代器类似于指针<代码>它
指向一对:
。发送方的地址可能是这对中的第一个元素,第二个元素是接收到的数据包数。
此对的第一个元素可以使用
it->first
获得,而第二个元素可以通过
it->second
获得。 操作
recPkt.find(senderAddr)
检查
recPkt
是否包含地址为
senderAddr
的条目:

  • 如果不是,
    指向
    recPkt.end()
    ,则创建一个新条目,并将1设置为值(因为刚刚收到第一个数据包)
  • 如果
    senderAddr
    的条目已经存在,则使用
    it->second++
要向内部日志窗口显示接收到的数据包的当前值,可以使用:

for (auto it : recPkt) {
   EV << "From address " << it.first << " received " << it.second << " packets." << std::endl;   
}
参考:

编辑

还有一件事。
recPkt
的声明,即行:

std::map<L3Address, uint64_t> recPkt;
std::map recPkt;

一定在你们班
recPkt
不能在使用前声明。

您在编写“recv”时实际上是指“recPkt”吗?您提到,对于“if(it==recPkt.end())”命令,1被设置为值,因为第一个数据包刚刚收到。这是否意味着接收到来自地址为“senderAddr”的节点的第一个数据包?另一件事是,如果我想在日志窗口中显示它,我需要在哪里编写代码?是否在finish()下的.cc文件中?非常感谢。Jerzy,也请建议我在哪里写我在帖子中提到的地图创建代码。这是打字错误,我已经更正了我的答案。在
auto it=recPkt.find(senderAddr)之后
condition
it==recPkt.end()。您可以在代码中的任何位置显示“要记录的任何内容”窗口。显示接收到的数据包数量的最合适位置是在修改
recPkt
的代码之后。我在帖子中提到的地图创建代码的编写位置-您问题中的代码应该在接收到数据包之后插入,例如在
hadleMessage()中
或使用从
handleMessage()派生的方法。
我根据问题编写了代码,然后在handleMessage()下添加了日志窗口显示部分,得到了错误:inet/linklayer/xmac/xmac.cc:522:39:错误:“senderAddr”未在此范围内声明。你能建议如何克服这个错误吗?
std::map<L3Address, uint64_t> recPkt;