文档介绍:: .
Helper packetSinkHelper ("ns3::TcpSocketFactory", InetSocketAddress
(Ipv4Address::GetAny (), sinkPort));
ApplicationContainer sinkApps = ( (1));
(Seconds (0.));
(Seconds (10.));
(1)节点上,端口设置为8080;程序起始时间为
0s,终止时间为10s;
Ptr<MyApp> app = CreateObject<MyApp> ();
app->Setup (ns3TcpSocket, sinkAddress, 1040, 1000, DataRate ("1Mbps"));
(0)->AddApplication (app);
app->SetStartTime (Seconds (1.));
app->SetStopTime (Seconds (10.));
(0);发送起始时间为1s;结束时间为10s;
这样网络拓扑和节点之间应用程序的设定已完成,接下来就是应用统计模块,输出节点
之间具体通信性能的参数,及时延,吞吐量,抖动率,丢包率;
NS-3中,有一个回调机制,方便我们来输出具体某个条件发生改变时就自动执行某个函
数,回调的实现是TraceConnectWithoutContext 函数,举个例子,在我的时延仿真中,输
出时延的代码我是这样写的:
static void
CalculateDelay (Ptr<const Packet>p,const Address &address)
随意编辑精品文档
{
static float k = 0;
k++;
static float m = -1;
static float n = 0;
n += (p->GetUid() - m)/2-1;
(p);
Time t = ();
std::cout << Simulator::Now ().GetSeconds () << "\t" << ()
<< std::endl;
m = p->GetUid();
}
首先定义一个时延的计算函数,是全局变量函数;
其次在 main 函数中使用回调机制:
(0)->TraceConnectWithoutContext("Rx",
MakeCallback(&CalculateDelay));
含义就是当接受端节点每收到一个TCP 包,就会执行一次 CalculateDelay 函数,计算这
个数据包在网络中传输的时延,并输出;
这样就完成了程序的编写;接下来就是输出具体数据:
在终端打开,到指定的文件夹中,输入
./waf --run scratch/delay > 2>&1
文件之后,再在终端用 GNUPLOT 文件中的图形即可:
随意编辑精品文档
下面用同样的拓扑,应用程序以及同样的错误模型仿真输出