NS2相关学习——完成一个新的协议(1)

接下来要进入对我来说老大难的环节了,从表面的TCL慢慢进入到后端的C++,一起加油学习吧~


在本节学习中,将给出一个在ns中实现新的协议的例子。但是可以想见的是,如果由我们自己来完成这个工作,势必要对NS2十分的熟悉并且要对c++的相关知识有一定了解(课程中有这门课,表示hold不住,学精一门语言是多么重要)。在开始这项工作以前,读者应该先至少要了解TCL与c++之间的联系。可以从 学http://www.isi.edu/nsnam/ns/tutorial/ 的3.1-3.3开始。

下面首先来列举一下3.1-3.3到底说了什么东西。

3.1 Concept Overview

为什么选择两种语言? ns使用两种语言,因为模拟器有两种不同的事情需要做。 一方面,协议的详细模拟需要一种系统编程语言,可以有效地操纵字节,数据包头和实现在大数据集上运行的算法。 对于这些任务,运行时速度很重要,周转时间(运行模拟,查找错误,修复错误,重新编译,重新运行)不太重要。——选择了C++
另一方面,网络研究的很大一部分涉及到稍微变化的参数或配置,或者很快地探索了一些场景。 在这些情况下,迭代时间(更改模型并重新运行)更为重要。 由于配置运行一次(在模拟开始时),这部分任务的运行时间不太重要。——选择了TCL

什么时候使用C++呢?① 在做任何需要处理流的每个数据包的东西;② 以未预期的方式更改现有C ++类的行为;

什么时候使用TCL呢? ① 用于配置,设置和“一次性”的东西;② 通过操作现有的C ++对象来执行所需的操作;

3.2 代码概述

在〜tclcl /中定义了一些类。我们只专注于ns中使用的六个:

① TclSectionsec类:Tcl包含C ++代码将用于访问解释器的方法。

② TclObjectSectionsec类:TclObject是在编译层次结构中也被镜像的所有模拟器对象的基类。

③ TclClassSectionsec类:TclClass定义了解释类层次结构以及允许用户实例化TclObject的方法。

④ TclCommandSectionsec类:TclCommand用于定义简单的全局解释器命令。 

⑤ EmbeddedTclSectionsec类:EmbeddedTcl类包含加载更高级别内置命令的方法,使配置模拟更容易。

⑥ InstVarSectionsec类:InstVar类包含访问C ++成员变量作为OTcl实例变量的方法。


3.3 TCL类

Tcl ../Tcl / Tcl.h封装了OTcl解释器的实际实例,并提供了访问和与该解释器通信的方法。 该类提供了以下操作的方法:

① 获取对Tcl实例的引用;

② 通过解释器调用OTcl程序;

③ 将结果回收给解释器;

④ 报告错误情况,统一退出; 

⑤ 存储和查找“TclObjects”;

⑥ 得到直接访问解释器的方法;

在下面6个小节中仔细分析这六个方面;

该类的单个实例在〜tclcl / Tcl.cc中声明为静态成员变量; 程序员必须获得对该实例的引用以访问本节中描述的其他方法。 访问此实例所需的语句是:

Tcl&tcl = Tcl :: instance();

②调用OTcl程序

通过实例tcl调用OTcl命令有四种不同的方法。他们 的调用方式有本质上的不同。 每个函数将一个字符串传递给解释器,然后在全局上下文中对该字符串求值。 如果解释器返回TCL_OK,这些方法将返回给调用者。 另一方面,如果解释器返回TCL_ERROR,则方法将调用tkerror。 用户可以重载此过程,以选择性地忽略某些类型的错误。 OTcl编程的复杂性超出了本文档的范围。

③ 返回值

当解释器调用C ++方法时,它会将结果返回到私有成员变量tcl_-result中。 有两种方法可用于设置此变量。

[const char* $s$]tcl.result../Tcl/Tcl.hTcl::result

将结果字符串$ s $传回给解释器。

[const char* fmt, ...]tcl.resultf../Tcl/Tcl2.ccTcl::resultf

varargs(3)以上变体使用vsprintf(3)格式化结果,将结果字符串传回给解释器。(翻译无能。。。。)

同样,当C ++方法调用OTcl命令时,解释器将返回tcl_-result中的结果。

tcl.result ../ Tcl / Tcl.hTcl :: result必须用于检索结果。 请注意,结果是一个字符串,必须转换成适合于结果类型的内部格式。

       tcl.evalc("Simulator set NumberInterfaces_");char* ni = {\bfseries{}tcl.result}();if (atoi(ni) != 1)tcl.evalc("Simulator set NumberInterfaces_ 1");



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NS2相关学习——完成一个新协议(2)

在上节中,我们把教程要求的3.1-3.3过了一遍,这一次回到正途上来。看看到底是怎么完成一个新的协议的。 本节中的代码实现了一些简单的“ping”协议(灵感来自“ns注释和文档”(现在更名为ns手册)的第9.6章中的“ping请…

NS2相关学习——完成一个新协议(3)

在前面已经基本学习了怎么完成一个新协议(一个神奇的ping协议,然鹅还是有点懵。。。) 接下来继续学习相关知识 接着上一部分从1开始 1、必要的修改 如果想要添加添加新的代理程序,就需要修改NS源文件中的内容,特别…

NS2相关学习——创建Xgraph的输出文件

经过前面学习代码的编写,这一部分,我们要学会如何进行分析,一个很直观的方式就是将结果图形化表示出来。 ns-allinone包的一部分是“xgraph”,一个绘图程序,可用于创建模拟结果的图形表示。 在本节中,将向…

NS2相关学习——在ns中模拟无线场景

之前学习的都是有线场景下的NS2相关应用,现在开始,终于要学习无线啦!无线是我研究的重点,要好好学习呀!在本节中,我们将学习使用ns中提供的移动无线仿真模型。 该部分由两部分组成。 在第一小节中&#xff…

An Energy-Efficient Ant-Based Routing Algorithm for Wireless Sensor Networks (无线传感网中一种基于蚁群算法的能量有效路由)

牙说:这篇论文是研究蚁群算法在能量有效路由协议的过程中必读的一篇文章,原是全英文,在这里按照自己的理解大致翻译成中文,好好学习,与君共勉。 论文题目:An Energy-Efficient Ant-Based Routing Algorith…

活在幻梦中的你我

其实仔细想想,人类和地球上的其它物种有什么不同呢?可能仅有的不同是,人类会去相信那本来并不存在的事情. 并且会为了那种虚幻的东西为止拼搏、努力。比如科技的发展,不就是人类在实现自己想象中的事物么,飞机、轮船、家电、计算机等等,无一…

An Energy-Efficient Ant-Based Routing Algorithm for Wireless Sensor Networks (无线传感网中基于蚁群算法的能量有效路由)2

牙说:接着上一篇继续写。论文标题:An Energy-Efficient Ant-Based Routing Algorithm forWireless Sensor Networks作者:Tiago Camilo, Carlos Carreto, Jorge S Silva, Fernando Boavida正文: 2、相关工作可以考虑无线传感器网络…

NS2仿真分析无线网络的攻击防御(1)

这个学期有个选题是NS2仿真分析无线网络的攻击防御,比较有意思的样子,现在来慢慢学一下这个是什么东西。 首先,还是一篇文章(老长老长了),还是全英文的,还是先来分析一下它到底在说什么&#x…

NS2仿真分析无线网络的攻击防御(2)

牙说:继续上一篇博文进行翻译。 4. NS和我们的工作 我们试图评估黑洞攻击在无线Ad-hoc网络中的影响。 为了实现这一点,我们已经使用NS 网络模拟 [14]程序模拟了一个含有黑洞节点的无线自组网络场景。为了模拟无线自组织网络中的黑洞节点,我…

Java集合之HashMap源码分析

以下源码均为jdk1.7 HashMap概述 HashMap是基于哈希表的Map接口的非同步实现. 提供所有可选的映射操作, 并允许使用null值和null健. 此类不保证映射的顺序. 需要注意的是: HashMap不是同步的. 哈希表 哈希表定义: 哈希表是一种根据关键码去寻找值的数据映射结构, 该结构通…

NS2相关学习——可靠的MANET应用程序的Gossip协议分析

好久不写,应该努力啦!老师把这篇论文给了我,现在还不知道它在讲什么,来边翻译边学习吧! 文章链接:https://www.researchgate.net/publication/316844643_Analyzing_Gossip_Protocols_for_Reliable_MANET_Ap…

Java集合之LinkedList源码分析

概述 LinkedLIst和ArrayLIst一样, 都实现了List接口, 但其内部的数据结构不同, LinkedList是基于链表实现的(从名字也能看出来), 随机访问效率要比ArrayList差. 它的插入和删除操作比ArrayList更加高效, 但还是要遍历部分链表的指针才能移动到下标所指的位置, 只有在链表两头的…

lex和yacc环境配置

lex和yacc的使用很简单,但环境配置却是各种问题,本章说明lex和yacc在windows下的环境配置。 软件需求: 系统 win7-64位(win7-32, win8, win10全部通过) c编译器: vs2010(2008,2013,2015也全部通过) lex和yacc编译器&#xff1a…

Java集合之Vector源码分析

概述 Vector与ArrayLIst类似, 内部同样维护一个数组, Vector是线程安全的. 方法与ArrayList大体一致, 只是加上 synchronized 关键字, 保证线程安全, 下面就不具体分析源码了, 具体可以查看ArrayList中的源码分析. Vector源码分析 1.主要字段 2.构造函数 3.增删改查 其他方法…

Gossip协议的P2P会员管理

阅读此论文主要目的在于理解gossip协议及其背后的原理,此部分详细翻译,其余部分看时间 文章标题:Gossip协议的P2P会员管理 作者:Ayalvadi J. Ganesh, Anne-Marie Kermarrec, and Laurent Massoulie Abstract:基于…

Java集合之LinkedHashSet源码分析

概述 LinkedHashSet与HashSet类似, 不同的是LinkedHashSet底层使用LinkedHashMap维护元素插入的顺序. LinkedHashSet继承自HashSet, 只是重写了HashSet的构造方法, 初始化一个LinkedHashMap, 其他均与HashSet相同. LinkedHashSet构造方法 HashSet的构造方法: 以上几乎就是Li…

2016-2017NBU期末考试记录

又是一年期末考 这个学期考的少,就两门 还是来记录一下都考了什么东西吧 首先编译:编译的题目是开始十道判断题,后面全都是大题。大题内容有:画出第二次递归过程中,活动记录中静态链和动态链的情况;给出一…

Java集合之ArrayList源码分析

概述 ArrayList可以理解为动态数组, 根据MSDN的说法, 就是Array的复杂版本. 与数组相比, 它的容量能动态增长. ArrayList是List接口的可变数组的实现. 实现了所有可选列表操作, 允许包括null在内的所有元素. 数组的特点, 查询快增删慢. 每个ArrayList实例都有一个容量, 该容…

视频业务原理

最近要学习如何进行视频的用户体验测量,首先学习最基础的知识,视频业务的原理是什么。 研究的视频的应用层协议是HTTP,使用的传输层协议是TCP。 工作过程如下:客户端向服务器请求相应的视频信息;服务器响应请求发回视…

Java集合之Hashtable源码分析

概述 Hashtable也是基于哈希表实现的, 与map相似, 不过Hashtable是线程安全的, Hashtable不允许 key或value为null. 成员变量 Hashtable的数据结构和HashMap一样, 采用 数组加链表的方式实现. 几个成员变量与HashMap一样: 方法 Hashtable的方法与HashMap基本一样, 只是 Ha…