zoukankan      html  css  js  c++  java
  • 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 ());
    }
    
    
  • 相关阅读:
    【转载】Git和Repo扫盲——如何取得Android源代码 .
    【转载】玩转C链表
    【转载】彩色 LCD 接口
    【转载】LCD DBI接口与DPI接口
    【原创】Display interface types supported
    【转载】交叉编译的基本概念
    【转载】谈谈Linux内核驱动的coding style
    深层神经网络
    Renju 方案(draft)
    Mathematica练习
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5668349.html
Copyright © 2011-2022 走看看