Если я правильно понимаю проблему, вы пытаетесь запустить операторы печати в for-l oop. FlowMonitor собирает статистику моделирования во время его работы. Вы поместили for-l oop перед вызовом Simulator::Run()
, поэтому вы пытаетесь распечатать статистику моделирования до его запуска! Я предполагаю, что flowmon->GetFlowStats()
возвращает пустую карту, поэтому у вас нет нулевого указателя, который заставил бы вашу программу обработать sh: for для l oop просто обнаруживает, что карта пуста, и не запустить.
Решение простое: переместите следующий код после вызова на Simulator::Run()
:
flowmon->CheckForLostPackets ();
std::map<FlowId, FlowMonitor::FlowStats> stats = flowmon->GetFlowStats ();
for (std::map<FlowId, FlowMonitor::FlowStats>::const_iterator m_numNodes = stats.begin (); m_numNodes != stats.end (); ++m_numNodes)
{
NS_LOG_UNCOND("Flow ID: " << m_numNodes->first << " Position of sink: " << sink.Get (0) << " Dst Addr " << sinkDev.Get (0));
NS_LOG_UNCOND("Tx Packets = " << m_numNodes->second.txPackets);
NS_LOG_UNCOND("Rx Packets = " << m_numNodes->second.rxPackets);
NS_LOG_UNCOND("Throughput: " << m_numNodes->second.rxBytes * 8.0 / (m_numNodes->second.timeLastRxPacket.GetSeconds()-m_numNodes->second.timeFirstTxPacket.GetSeconds()) / 1024 << " Kbps");
}
Вы также должны переместить вызов flowmon->checkForLostPackets()
, поскольку FlowMonitor будет делать это так. окончательный повторный вызов, чтобы определить, какие пакеты отсутствуют (ie. отброшено) после , когда моделирование завершилось.