/* -- Mode:C++; c-file-style:“gnu”; indent-tabs-mode:nil; -- /
/
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation;
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include “ns3/core-module.h”
#include “ns3/network-module.h”
#include “ns3/internet-module.h”
#include “ns3/point-to-point-module.h”
#include “ns3/applications-module.h”
using namespace ns3;
NS_LOG_COMPONENT_DEFINE (“FirstScriptExample”);//定义日记组件,生成LogComponnet类型的对线g_log,并且通过构造函数LogComponent(name)初始化
int
main (int argc, char *argv[])
{
Time::SetResolution (Time::NS); //设置时间经读为纳秒级别
//下面两行脚本是用来使2个日志组件生效的,它们被内建在EchoClient 和Echo Server的应用中:
LogComponentEnable (“UdpEchoClientApplication”, LOG_LEVEL_INFO);
LogComponentEnable (“UdpEchoServerApplication”, LOG_LEVEL_INFO);
//下面两行回创建ns3节点对象,在仿真中代表计算机。
NodeContainer nodes;
nodes.Create (2);
//NodeContainer是Node辅助类用来创建,管理,访问Node对象
//node.Create(2)创建两个Node对象,并且在内部存储Node对象指针
//ns3将网卡与网线抽象为了网络设备与信道2个概念,下面语句实现了网络节点的物理连接
//PointToPointHelper类负责设置网络设备和信道属性,并通过Install方法把设备安装到节点中。
PointToPointHelper pointToPoint; //初始化了一个PointToPointHelper的对象PointToPoint。
pointToPoint.SetDeviceAttribute (“DataRate”, StringValue (“5Mbps”));//使用5Mbit/s作为数据速率
pointToPoint.SetChannelAttribute (“Delay”, StringValue (“2ms”)); //使用“2ms”作为每一个被创建的点到点信道的传输延时值。
//NetDeviceContainer用来访问创建的NetDevice对象
NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);
//这两行代码完成设备与信道的配置。第一行申明了上面提到的设备容器,第二行完成了主要工作。
//当调用了pointToPoint.Install(nodes)后,会有2个节点,每一个节点安装了点到点网络设备,在它们之间是一个点到点信道。2个设备会被配置在一个有2ms传输延时的信道上以5Mbit/s的速率传输数据。
//为计算机安装协议栈
InternetStackHelper stack;
stack.Install (nodes);
//在每个node中安装internet协议栈
Ipv4AddressHelper address;
address.SetBase (“10.1.1.0”, “255.255.255.0”);
//IP设置辅助类,设置IP地址分配参数
//地址从1开始分配,顺次递增
Ipv4InterfaceContainer interfaces = address.Assign (devices);
//这行代码完成了真正的地址配置。在ns-3中使用Ipv4Interface对象将一个IP地址同一个设备关联起来。
// 下面的代码用来安装服务器端应用程序、设置端口号:
UdpEchoServerHelper echoServer (9);
//创建一个辅助类来帮助创建应用,参数为端口号
ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
//服务端在1s的时候开始发送数据,10s的时候停止
//这里设置客户端应用层
//客户端应用的设置与服务器端类似。也有一个UdpEchoClientHelper 来管理UdpEchoClientApplication。
UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);
//使用Node1的地址及端口初始化辅助对象
echoClient.SetAttribute(“MaxPackets”, UintegerValue(1));
//“MaxPackets”属性告诉客户端所允许它在模拟期间能发送的最大数据分组个数。
echoClient.SetAttribute (“Interval”, TimeValue (Seconds (1.0)));
// “Interval”属性告诉客户端在2个数据分组之间要等待多长时间
echoClient.SetAttribute (“PacketSize”, UintegerValue (1024));
// “PacketSize”属性告诉客户端它的数据分组应该承载多少数据。
ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));
//使客户端在服务端生效1 s后才开始
//启动模拟器
Simulator::Run ();
Simulator::Destroy ();
return 0;
}