#include #include "ns3/core-module.h" #include "ns3/helper-module.h" #include "ns3/node-module.h" #include "ns3/core-module.h" using namespace ns3; static void GenerateTraffic (Ptr socket, uint32_t size) { std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, tx bytes=" << size << std::endl; socket->Send (Create (size)); if (size > 0) { Simulator::Schedule (Seconds (0.5), &GenerateTraffic, socket, size - 50); } else { socket->Close (); } } static void SocketPrinter (Ptr socket) { Ptr packet; while (packet = socket->Recv ()) { std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, rx bytes=" << packet->GetSize () << std::endl; } } static void PrintTraffic (Ptr socket) { socket->SetRecvCallback (MakeCallback (&SocketPrinter)); } void RunSimulation (void) { NodeContainer c; c.Create (1); InternetStackHelper internet; internet.Install (c); TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory"); Ptr sink = Socket::CreateSocket (c.Get (0), tid); InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 80); sink->Bind (local); Ptr source = Socket::CreateSocket (c.Get (0), tid); InetSocketAddress remote = InetSocketAddress (Ipv4Address::GetLoopback (), 80); source->Connect (remote); Simulator::ScheduleWithContext (source->GetNode ()->GetId (), Seconds (0.0), &GenerateTraffic, source, 500); PrintTraffic (sink); Simulator::Run (); Simulator::Destroy (); } int main (int argc, char *argv[]) { RunSimulation (); return 0; }