• NS3 MyApp Class Reference


    官方文档:MyApp

    可以在下面的几个例子找到:

    examples/tutorial/fifth.cc

    examples/tutorial/seventh.cc

    examples/tutorial/sixth.cc

    SetUp函数

    
    class MyApp : public Application
    {
    public:
    
      MyApp ();
      virtual ~MyApp();
    
      void Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate);
    
    private:
      virtual void StartApplication (void);
      virtual void StopApplication (void);
    
      void ScheduleTx (void);
      void SendPacket (void);
    
      Ptr<Socket>     m_socket;
      Address         m_peer;
      uint32_t        m_packetSize;
      uint32_t        m_nPackets;
      DataRate        m_dataRate;
      EventId         m_sendEvent;
      bool            m_running;
      uint32_t        m_packetsSent;
    };
    
    MyApp::MyApp ()
      : m_socket (0),
        m_peer (),
        m_packetSize (0),
        m_nPackets (0),
        m_dataRate (0),
        m_sendEvent (),
        m_running (false),
        m_packetsSent (0)
    {
    }
    
    MyApp::~MyApp()
    {
      m_socket = 0;
    }
    
    void
    MyApp::Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate)
    {
      m_socket = socket;
      m_peer = address;
      m_packetSize = packetSize;
      m_nPackets = nPackets;
      m_dataRate = dataRate;
    }
    
    void
    MyApp::StartApplication (void)
    {
      m_running = true;
      m_packetsSent = 0;
      m_socket->Bind ();
      m_socket->Connect (m_peer);
      SendPacket ();
    }
    
    void
    MyApp::StopApplication (void)
    {
      m_running = false;
    
      if (m_sendEvent.IsRunning ())
        {
          Simulator::Cancel (m_sendEvent);
        }
    
      if (m_socket)
        {
          m_socket->Close ();
        }
    }
    
    void
    MyApp::SendPacket (void)
    {
      Ptr<Packet> packet = Create<Packet> (m_packetSize);
      m_socket->Send (packet);
    
      if (++m_packetsSent < m_nPackets)
        {
          ScheduleTx ();
        }
    }
    
    void
    MyApp::ScheduleTx (void)
    {
      if (m_running)
        {
          Time tNext (Seconds (m_packetSize * 8 / static_cast<double> (m_dataRate.GetBitRate ())));
          m_sendEvent = Simulator::Schedule (tNext, &MyApp::SendPacket, this);
        }
    }
    
    static void
    CwndChange (uint32_t oldCwnd, uint32_t newCwnd)
    {
      NS_LOG_UNCOND (Simulator::Now ().GetSeconds () << "	" << newCwnd);
    }
    
    static void
    RxDrop (Ptr<const Packet> p)
    {
      NS_LOG_UNCOND ("RxDrop at " << Simulator::Now ().GetSeconds ());
    }
    
    
  • 相关阅读:
    day-11 python自带库实现2层简单神经网络算法
    day-10 sklearn库实现SVM支持向量算法
    day-9 sklearn库和python自带库实现最近邻KNN算法
    day-8 python自带库实现ID3决策树算法
    day-7 sklearn库实现ID3决策树算法
    day-6 机器学习概念及应用
    day-5 python协程与I/O编程深入浅出
    day-4 python多进程编程知识点汇总
    day-3 python多线程编程知识点汇总
    3、TensorFlow基础(一) 设计思想与编程模型
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5668349.html
Copyright © 2020-2023  润新知