如何在ns2中添加一个新的协议

 我来答
cobra801sohu
高粉答主

推荐于2016-11-15 · 醉心答题,欢迎关注
知道顶级答主
回答量:10.4万
采纳率:88%
帮助的人:2.7亿
展开全部
如果我们要往NS2中添加自己的模块,那么我们至少要实现两个类:

一, 首先要有一个类继承自TclObject类或者其子类,例如这个Mac802_16类的继承关系为:TclObject/NsObject/Mac /Mac802_16.这个类里面实现了C++类里面的变量与Otcl类的变量的绑定关系,以及我们的模块要实现的一系列算法等等,这个类负责的就是协议 的实现。

这个类,一般需要有构造函数中执行变量的绑定,使用bind()函数,将Otcl变量与C++的成员变量绑定起来。

声 明为protected的command()函数:为Otcl类提供方法,对Otcl中的类的方法进行翻译并执行;对于没有考虑到的或者不能解析的命令, 调用该C++类的父类的command方法。当在Otcl类中调用某个方法时,首先去tcl类中查找并执行该方法;若查找失败,则在该Otcl类对应的 C++类的command方法中查找,若查找仍然失败,则沿着该类的父类一直往上找,尝试调用它们的command方法;若所有父类的command方法 都不能解析,则报告该命令无法执行。

其他的成员变量和成员函数,这是用于实现自己的算法模块的内容。

二,其次我们要定义一个声明为static的类,继承自TclClass类,这个类实现了C++环境里面的类与Otcl环境里面的类的关联,简单点来说,这个类负责与Otcl环境进行关联。取最开头的那段代码;

static class Mac802_16Class : public TclClass

{

public:

Mac802_16Class() : TclClass("Mac/802_16") {}

TclObject* create(int, const char*const*)

{

return (new Mac802_16());

}

} class_mac802_16;

这 一段代码里面,包含了一个将Otcl的类名作为参数传给其父类的构造函数;一个create方法:创建一个C++类的对象实例并返回;该方法的返回类定义 为TclObject*。C++类的类型包含在create方法中,Otcl类的类型包含在TclClass类的构造函数中,因此可以实现C++类和 Otcl类的连接。

接下来,如果我们要实现的类完成以后,将头文件和源文件放置于~ns目录下自己新建的一个子目录,然 后打开~ns/Makefile文件,将“类名.o”添加到该Makefile的OBJ_CC宏定义中,对ns进行编译的时候就能够能够找到该模块的源文 件并将其编译到ns中;如果类中定义了一些变量,打开~ns/tcl/lib/ns-default.tcl文件,为该类对应的Otcl类设置一些初始 值。最后,对Makefile执行指令:make clean,make,对整个ns重新编译,我们的模块就可以添加到ns2中了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
您可能需要的服务
百度律临官方认证律师咨询
平均3分钟响应 | 问题解决率99% | 24小时在线
立即免费咨询律师
16198人正在获得一对一解答
杭州雪花飘飘5分钟前提交了问题
南宁热带风暴6分钟前提交了问题
重庆晨曦微光6分钟前提交了问题
下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消
还有疑问? 马上咨询32918位在线律师,3分钟快速解答
立即免费咨询律师

辅 助

模 式