码迷,mamicode.com
首页 > 其他好文 > 详细

NS2学习笔记(四)

时间:2015-01-10 12:36:39      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

  这几天学习NS2,虽然国内很多人使用,但系统的教材资料不多,只能一边看中文教材,一边看英文手册,知识点也是零零散散。过段时间等能将所有知识点串上,再总结总结。现只讲一些零碎的点记录一下。

 

添加新的协议

添加新的协议,实际上是自己新定义了一个Agent的子类。在笔记(三)已经说过,Agent的子类实际上可以用来实现协议,比如TCP,UDP等等。

下面以新添加一个"Ping"协议为例来讲讲怎么添加新协议。

1.定义一个PingClass,它是TclClass的子类,它的定义是模板化的,只要套用就行了。

static class PingClass : public TclClass
{
public:
    PingClass():TclClass("Agent/Ping") {}
    TclObject* create(int, const char*const*) 
    {
        return (new PingAgent());
    }    
}class_ping;

  这里实际上已经有一个PingClass的static对象,class_ping,在创建它的时候已经调用了PingClass的构造函数,继而调用了TclClass的构造函数,将Agent/Ping作为参数传进去了。

2.在仿真的tcl脚本中,新建一个Agent的方法是:set 变量名 [new 协议名],例如 set tcp [new Agent/TCP]。第一步中将Agent/Ping作为参数穿进去,就是为了在新建Ping协议的Agent时,程序认识Agent/Ping这个东西。

在set ping [new Agent/Ping]后,NS会调用PingClass的create方法,返回一个PingAgent的对象,这个类我们得自己定义,它是协议的核心。这第二步就是定义这个类。

class PingAgent : public Agent
{
public:
    PingAgent();
    int command(int argc, const char*const* argv);
    void recv(Packet*, Handler*);
protected:
    int off_ping_;
};

 

NS2学习笔记(四)

标签:

原文地址:http://www.cnblogs.com/johnsblog/p/4214655.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!