如何找出从每个发件人收到的数据包的数量
How to find out the number of received packets from each sender
在带有 INET 框架的 OMNET++ 中,我想知道每次发送收到了多少数据包 node.I 找到了下面的代码。谁能告诉我下面代码中“it->second++”命令的功能是什么?
std::map<L3Address, uint64_t> recPkt;
auto it = recPkt.find(senderAddr);
if (it == recPkt.end())
recPkt[senderAddr] = 1;
else
it->second++;
此外,谁能建议如何显示每个节点接收到的数据包数。
it
是 std::map
的一个元素的迭代器。迭代器类似于指针。 it
指向一对:<L3Address, uint64_t>
。大概发送者的地址是这对的第一个元素,第二个是接收包的数量。
这对的第一个元素可以使用 it->first
获得,而第二个元素可以通过 it->second
获得。
操作 recPkt.find(senderAddr)
检查 recPkt
是否包含地址为 senderAddr
:
的条目
- 如果不是,
it
指向recPkt.end()
,则创建一个新条目并将1设置为值(因为刚刚收到第一个数据包),
- 如果
senderAddr
的条目已经存在,则使用 it->second++
递增此元素(计数器)的第二个值
要将接收到的数据包的当前值显示到内部日志 window 可以使用:
for (auto it : recPkt) {
EV << "From address " << it.first << " received " << it.second << " packets." << std::endl;
}
但是,更好的方法是将这些值写入统计信息。最好的地方是模块的 finish()
方法:
void YourModule::finish() {
// ..
for (auto it : recPkt) {
std::string name = "Received packet from ";
name += it.first.str(); // address
recordScalar(name, it.second);
}
}
编辑
还有一件事。 recPkt
的声明即行:
std::map<L3Address, uint64_t> recPkt;
必须在您的 class 中。 recPkt
不能在使用前声明。
在带有 INET 框架的 OMNET++ 中,我想知道每次发送收到了多少数据包 node.I 找到了下面的代码。谁能告诉我下面代码中“it->second++”命令的功能是什么?
std::map<L3Address, uint64_t> recPkt;
auto it = recPkt.find(senderAddr);
if (it == recPkt.end())
recPkt[senderAddr] = 1;
else
it->second++;
此外,谁能建议如何显示每个节点接收到的数据包数。
it
是 std::map
的一个元素的迭代器。迭代器类似于指针。 it
指向一对:<L3Address, uint64_t>
。大概发送者的地址是这对的第一个元素,第二个是接收包的数量。
这对的第一个元素可以使用 it->first
获得,而第二个元素可以通过 it->second
获得。
操作 recPkt.find(senderAddr)
检查 recPkt
是否包含地址为 senderAddr
:
- 如果不是,
it
指向recPkt.end()
,则创建一个新条目并将1设置为值(因为刚刚收到第一个数据包), - 如果
senderAddr
的条目已经存在,则使用it->second++
递增此元素(计数器)的第二个值
要将接收到的数据包的当前值显示到内部日志 window 可以使用:
for (auto it : recPkt) {
EV << "From address " << it.first << " received " << it.second << " packets." << std::endl;
}
但是,更好的方法是将这些值写入统计信息。最好的地方是模块的 finish()
方法:
void YourModule::finish() {
// ..
for (auto it : recPkt) {
std::string name = "Received packet from ";
name += it.first.str(); // address
recordScalar(name, it.second);
}
}
编辑
还有一件事。 recPkt
的声明即行:
std::map<L3Address, uint64_t> recPkt;
必须在您的 class 中。 recPkt
不能在使用前声明。