NS2机制浅显分析

合集下载

NS2网络仿真软件应用于教学中的研究共7页文档

NS2网络仿真软件应用于教学中的研究共7页文档

NS2网络仿真软件应用于教学中的研究0 引言随着网络技术的飞速发展,传统的计算机网络教学受到较大的冲击,在教学中引入网络模拟显出了十分的必要性与重要性。

计算机网络教学一般可分为理论教学和实验教学两个部分,传统的教学模式存在很突出的问题。

首先,计算机网络课程从设计到许多复杂的概念和原理,教学中通常使用幻灯片来教学,无法简单灵活地来展示动态过程。

学生在学习中感到枯燥乏味,难以理解,导致渐渐失去兴趣。

其次,实验器材比较昂贵,实验室内配备的实验器材数量有限,很难达到较高标准的实验环境,并且实验的时间也是有限的,学生无法充分地理解并且掌握通信技术以及网络工程应用能力,久而久之更加感到无趣。

解决这一难题的有效方法是,在教学中引入网络模拟技术,使用NAM 工具,可以清晰地向学生展示网络协议的动态运行过程,提高学生的学习效率,改善教学效果。

1 NS2仿真软件简介NS2是一款开放源代码的网络模拟原件,由美国加州大学伯克利分校(UC Berkeley)的MASH研究组开发。

NS2能够仿真多种网络上的众多协议,这些协议涉及到网络的各个层次[1]。

NS2的本质是一个面向对象的离散事件模拟器[2],所有的仿真都是由离散事件驱动的。

NS2采用C++和OTcl两种开发语言进行开发,底层仿真引擎主要用C++编写,OTcl作为仿真时的命令和配置语言。

C++是强制类型的程序设计语言,程序模块运行速度非常快,易实现精确复杂的算法。

Otcl是无强制类型的脚本程序编写语言,具有简单、容易实现和修改的特性,可以在不必重新编译的情况下修改仿真参数和仿真过程,两种语言的结合使NS2的仿真效率特别高。

NS2为基于Unix平台的开源免费软件,可以在其官方网站下载。

同时也可以在Windows下使用,鉴于多媒体教室以及实验室条件,可以采用Windows+Cygwin+NS2的安装方式。

2 NS2模拟仿真实验管理器为了方便管理编写后的NAM文件,开发了NS2模拟仿真实验管理器(图1)。

NS2学习笔记(15)——无线网络传输问题探讨及效果分析

NS2学习笔记(15)——无线网络传输问题探讨及效果分析

NS2学习笔记(15)——无线网络传输问题探讨及效果分析1、Destination(1)了解什么是隐藏节点和暴露节点问题(2)了解RTS/CTS是如何降低隐藏节点问题发生的概率,以提升系统效果(3)了解NS2中无线传输模型和门限的概念(4)了解如何在NS2中建立无线自组织网络(Wireless Ad Hoc Networks)(5)学习分析无线自组织网络路由协议(Ad Hoc Routing Protocol)的效果(6)了解802.11b DCF和802.11e EDCF机制运作(7)探讨802.11b DCF和802.11e EDCF机制对多媒体数据流所提供的传输服务质量(8)了解802.11b所提供的吞吐量上限值(9)了解哪些因素会影响802.11b的吞吐量(10)了解什么是效果异常(Performance Anomaly)现象(11)了解现有改善效果异常的方法及如何提升系统效果2、Background(1)隐藏节点(隐终端)隐藏终端是指在接收接点的覆盖范围内而在发送节点的覆盖范围外的节点。

隐藏终端由于听不到发送节点的发送而可能向相同的接收节点发送分组,导致分组在接收节点处冲突。

冲突后发送节点要重传冲突的分组,这降低了信道的利用率。

隐藏终端又可以分为隐发送终端和隐接收终端两种。

在单信道条件下,隐发送终端可以通过在发送数据报文前的控制报文握手来解决。

但是隐接收终端问题在单信道条件下无法解决。

当A要向B发送数据时,先发送一个控制报文RTS;B接收到RTS 后,以CTS控制报文回应;A收到CTS后才开始向B发送报文,如果A没有收到CTS,A认为发生了冲突,重发RTS,这样隐发送终端C能够听到B发送的CTS,知道A要向B发送报文,C延迟发送,解决了隐发送终端问题。

对于隐接收终端,当C听到B发送的CTS控制报文而延迟发送时,若D向C发送RTS控制报文请求发送数据,因C不能发送任何信息,所以D无法判断时RTS 控制报文发生冲突,还是C没有开机,还是C 时隐终端,D只能认为RTS报文冲突,就重新向C发送RTS。

ns2的基本功能和用法。

ns2的基本功能和用法。

ns2的基本功能和用法。

NS2是一款广泛使用的离散事件网络仿真器,它可以用来模拟网络协议、网络拓扑结构、传输层协议等各种网络方面的问题。

在本文中,我们将会详细介绍NS2的基本功能和用法,让您了解如何使用这个强大的工具来开展网络仿真和探索。

第一部分:NS2的简介NS2全称Network Simulator 2,是一款免费且开源的网络仿真平台,它可以运行于Linux和Windows操作系统。

NS2是C++编写的,它是由一个模块化的体系结构构建而成的。

NS2可以帮助你模拟和测试各种网络协议和技术,包括但不限于TCP/IP、WiFi、无线通信、移动通信、卫星通信等。

NS2的基本组成部分包括:- OTcl:OTcl是一个面向对象的Tcl解释器,它被用来编写NS2的脚本文件。

它可以帮助您表示仿真模型以及控制仿真场景和参数。

- C++代码:NS2的模拟核心是由C++编写的,它包含了底层的网络协议处理逻辑和数据结构。

- Trace:NS2的Trace模块可以记录仿真过程中所有的事件和消息交换。

我们可以通过Trace来分析仿真结果,并对仿真场景进行可视化。

总结NS2是一个开源且强大的网络仿真器,它的核心部分是由C++编写而成的。

NS2可以帮助您模拟和测试各种网络协议和技术,并提供一个强大的OTcl 脚本语言来控制和配置仿真模型。

第二部分:NS2的基本功能NS2提供了很多强大的功能,如下所示:1. 拓扑结构模拟NS2可以帮助我们模拟各种网络拓扑结构,例如星型、树形结构、层次结构等。

通过定义节点、连接和协议,我们可以很容易地构建复杂的拓扑结构,并进行仿真和测试。

2. 参数设置和控制通过OTcl脚本,我们可以轻松地配置和控制仿真模型。

我们可以设置各种参数,例如发送速率、仿真持续时间、节点位置等等。

此外,我们还可以通过设置事件触发器来控制仿真场景的流程。

3. 模拟协议NS2可以帮助我们模拟各种协议,例如TCP、UDP、ICMP等。

网络仿真器NS2剖析NetworkSimulatorV2

网络仿真器NS2剖析NetworkSimulatorV2
实例化TclObject,与TclObject一一对应 ❖ TclCommand类:封装了C++代码和Tcl代码相互调
用命令的方法 ❖ EmbeddedTcl类:封装了装载更高级别的内置命令
的方法 ❖ InstVar类:访问C++成员变量,如Otcl变量方法
Tcl类
❖ 获得访问Tcl实例的入口 ❖ 通过解释器调用Otcl过程 ❖ 与解释器交换结果 ❖ 报告出错状况,并以统一方式退出 ❖ 存储、查找TclObject类对象 ❖ 取解释器的句柄
❖ 类TclClass是一个纯虚类,从它派生的 子类需实现两个成员函数:其一是构造 函数,构造解释类层次来镜像编译类层 次;其二是生成函数,生成与之相对应 的TclObjects对象 。
❖ 流程图
TclCommand类
❖ 类TclCommond的作用就在为解释器提供全 局命令
❖ 由TclCommand的定义知道,它是一个虚基 类,必须派生子类,才能工作。
tcpgen.tcl
Nam与Xgraph
❖ 图形显示工具 ❖ Nam <filename.out>:动态显示网络仿真过
程。如:包的传输等等 ❖ Xgraph <filename.tr>:显示仿真过程的数值
特征。如:流量/时间图等
四、NS2的使用
❖ 命令行方式:敲入一个命令,返回一个结果 输入命令: %/ns-version 返回版本号: ns /2.0a12
❖ Base classifier是一虚基类 ❖ address classifier:支持独播,通过位移和掩码将
包的目的地址转化成槽的号码。 ❖ multicast classifier:保持一个哈希链表,匹配地址

NS2 概况

NS2 概况
3.设置环境变量 在终端下输入: gedit ~/.bashrc 将下面的代码加入.bashrc 文件的尾部。注意用你实际的路 径位置替换下面代码中出现"/ your/path"的地方。 #added by janh export PATH="$PATH:/home/natalie/ns-allinone2.31/bin:/home/natalie/ns-allinone2.31/tcl8.4.14/unix:/home/natalie/ns-allinone2.31/tk8.4.14/unix“ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/natalie/nsallinone-2.31/otcl-1.13:/home/natalie/ns-allinone-2.31/lib“ export TCL_LIBRARY="$TCL_LIBRARY:/home/natalie/nsallinone-2.31/tcl8.4.14/library"
NS2 主要构件概览
• 前面已经提到,NS2 是一种面向对象的离散 事件驱动的网络仿真器,因此,他的所有 构件已编写成相应的C++类和OTcl 对象。 C++也被称为编译类,是算法和协议的具体 实现代码,OTcl 对象也称为解释对象,是用 户接口对象,用户编写仿真脚本主要就是 建立OTcl 对象、设置其属性、然后通过事件 调度器调度网络模拟事件的发生。
主流仿真软件对比
NS2安装
• Windows 平台(略) • Linux 平台 1.下载ns-allinone-2.31.tar.gz 并解压(tar–xzvf ns-allinone-2.31.tar.gz) 2. 选择安装位置:将解压缩得到的ns-allinone-2.31文件夹剪切到你的文件 夹下(既想要安装到的位置) 3. 在终端里安装: (1).打开一个终端(位置:应用程序>系统工具>终端); 在终端里输入sudo -i,回车;按提示输入密码,回车,进入root限操 作; (2). 下载并安装下一步安装ns -2.31时所必需的系统包: 首先,在终端里输入apt-get install build-essentia进行下载、安装,这 一步是为了gcc and some essential的安装; 接着,在终端里输入apt-get install tcl8.4 tcl8.4-dev tk8.4 tk8.4-dev进行 下载、安装,这一步是为了tcl and tk的安装; 最后,在终端里输入apt-get install libxmu-dev进行下载、安装,这一步 是为了nam的安装。 以上三步示意图如下:

网络模拟软件NS2与OPNET的剖析比较

网络模拟软件NS2与OPNET的剖析比较

网络模拟软件NS2与OPNET的剖析比较①王波周志伟(重庆大学计算机学院建筑智能化与城市数字化研究室重庆 400044)摘要:NS2和OPNET是目前主流的网络模拟软件,为深入地剖析比较它们的特点及差别以供学习和选用时参考,从软件技术、使用方法和引擎性能三个方面进行了详细对比分析。

在软件技术方面分别从体系结构、支持的网络技术、网络设备模型库和软件可扩展性上进行分析比较;在模拟器引擎性能方面,通过在相同模拟条件下,选取内存消耗和CPU运算时间两个指标,针对不同规模的抽象网络,分别对OPNET和NS2的引擎性能进行了对比实验。

结果表明,OPNET具有商业软件的优势,在用户友好性、模拟速度、内存消耗等方面优于NS2,而NS2则在开源和易扩展性方面优于OPNET,适合于模拟中小型网络。

关键词:网络模拟;网络模拟测试;NS2;OPNETComparative Analysis on Network Simulation Software NS2 and OPNETWANG Bo, ZHOU Zhi-Wei (Building Intelligentization and City Digitalization Lab, College of Computer Scienceof Chongqing University, Chongqing 400044, China)Abstract:This paper presents the features and differences of NS2 and OPNET by comparing them in the aspects of software technique, operation method and engineer performance. As to the software technique, itincludes four points for comparison: system architecture, supported network technique, networkequipment model bank and software scalability. To compare the performance of the simulator engine,an abstract network which is not real was established and simulated by these two simulators separatelyunder identical conditions. Meanwhile, two performance indices (memory consumption and computation time) were measured, recorded and analyzed. The comparison result indicates that OPENTas a commercial software is better than NS2 in user-friendliness, simulation speed and memoryconsumption while NS2 is superior to OPNET in the aspect of open-source and scalability and wellsuited for small scale network simulation.Keywords: network simulation; network simulation test; NS2; OPNET1 引言在计算机网络技术日新月异、高速发展的今天,一方面各种网络应用种类不断增加,新的协议、算法层出不穷,验证、测试和分析这些新应用、新协议和新算法的课题亟需解决,另一方面规划、设计新网络或者分析、测试和更新现有网络需要更加便捷、快速、准确的方法,各式各样的网络模拟工具应运而生,目前常见的主要有:NS(Network Simulator)与OPNET (Optimized Network Engineering Tool)以及OMNeT++和SSFNet 等,其中在教育、科研、商业等领域使用最广泛的是NS2与OPNET。

[课件]NS2网络模拟简介以及MTE、LEACH、LEACH-C协议仿真PPT


NS2的总体系结构


NS2的目录结构
ns-2.34:存放C++代码的地方; ns-2.34\tcl:存放OTcl代码的地方; Ns-2.34\tcl\lib:存放与组件(agent, node, link, packet, address, routing ) 实现有关的OTcl代码;在此目录下,有以下几个文件:ns-lib.tcl: Simulator 类定义与成员函数实现,如 run,simplexlink,flush-trace等;ns-default.tcl :各种网络组件配置的缺省值。 ns-2.34\tcl\ex, ns-2.34\tcl\test: 存放一些例子脚本文件和验证结果。

NS2的部分类结构


分类器——classifier是Ns-2基本网络组件的一个大类。 它的基本派生类有地址分类器(AddrClassifier)和多播 分类器(McastClassifier)等。基于分类器的基本网络 组件具有1个或多个可能的数据输出路径,属于交换 (Switch)设备(对应来说,连接器Connector只有一个 数据的输出路径)。 拓扑结点(Node)是由一个结点入口对象和若干个分类 器(Classifier)组成的一个符合对象。
节点存活率

节点能量消耗

数据包发送量
仿真后生成 x.data,x.alive,x.energy等文件(x对应的为协 议名称),分别对应的为各个协议的数据包传送个数, 节点生存情况和节点能量消耗,用awk语言编写程序, 提取数据进行分析 在Cygwin中用gnuplot 作出分析结果曲线


节点分布拓扑图(基站位置(0,0))

LEACH模型

网络仿真与NS-2简介2


OPNET的特性(续)
混合建模机制:把基于包的分析方法和基于统计的 混合建模机制 数学建模方法结合起来,既可得到非常细节的模拟 结果,也大大提高了仿真效率。 丰富的统计量收集和分析功能:它可以直接收集常 丰富的统计量收集和分析功能 用的各个网络层次的性能统计参数,能够方便地编 制和输出仿真报告。 网管系统、流量监测系统的接口:能够方便的利用 网管系统、流量监测系统的接口 现有的拓扑和流量数据建立仿真模型,同时还可对 仿真结果进行验证。
网络仿真软件的基本要求
Easy network topology setup Protocols and application implementation
TCP,UDP,… FTP, Telnet, Web, CBR, VBR,… Routing protocols Queue management protocols
/nsnam/index.php/Main_Page
NS-2的历史
NEST (Network Simulation Testbed) REAL (Realistic and Large) NS-1 NS-2 1989: REAL network simulator 1995: DARPA VINT project (Virtual InterNetwork Testbed) at LBL, Xerox PARC, UCB, and USC/ISI Present: DARPA SAMAN(Simulation Augmented by Measurement and Analysis for Network) project and NSF CONSER(Collaborative Simulation for Education and Research) project.

NS-2


NS2的仿真过程
进行一次仿真的步骤大致如下: (1)开始编写OTcl脚本。首先配置模拟网络拓 扑结构,此时可以确定链路的基本特性,如延迟、 带宽和丢失策略等。
NS2的仿真过程
(2)建立协议代理,包括端设备的协议绑定和 通信业务量模型的建立。 (3)配置业务量模型的参数,从而确定网络上 的业务量分布。 (4)设置Trace对象。NS通过Trace文件来保 存整个模拟过程。仿真完后,用户可以对Trace 文件进行分析研究。
NS-2的概貌

NS-2由两种编程语言,OTCL(具有面向对象特 性的TCL脚本程序设计语言)和C++实现。之所 以使用两种编程语言,是因为模拟器有两方面的 事情需要做。
为什么要用两种编程语言来实现NS?


模拟器有两方面的事情需要做 一方面,C++具体协议的模拟和实现: 另一方面,OTCL用来建立模拟的环境和配置参 数,并且方便修改和发现、修复程序中的Bug。
回顾平时进行c++编程的过程:
写具有各种独立功能的类 写main函数,让类实例化,即new出对象; 并让这些对象协调工作一个优秀的OO程序 应该只有main这个外部函数,其他全是类。

ns的类结构

那么ns中:
– – –
用c++实现各种功能实体,即类 用tcl语言new出c++对象,并进行初始化,让这些对象协调工作; 可以说,tcl充当了main函数的功能,但交互性更好 来看看tcl的初始化:
网络模拟环境 NS-2仿真软件简介
姓 名:任 三 阳 学 号:s070102094
பைடு நூலகம்
NS-2的概貌

NS2在无线网络实验教学中的应用word精品文档4页

NS2在无线网络实验教学中的应用基金项目:本文系2010-2013年重庆邮电大学教改项目“通信网络虚拟体验系统建设与实验课程开发”(项目编号:XJG1002)的研究成果。

无线网络技术[1]是当前计算机网络中的最热点的研究领域,也是一门理论性比较强的课程,在传统的实验室中开展实验教学比较困难。

现有的针对无线网络的实验设备,成本非常昂贵,而且代码保密,学生很难深入理解网络协议和算法。

为此,我们将网络仿真工具NS2引入无线网络实验教学中,利用NS2的动画效果动态演示节点的收发包过程,不但可以帮助学生深刻理解网络协议和算法,提高学生学习无线网络的兴趣,而且利用NS2代码开源的特点,还可以使得学生深入到协议和算法的具体实践中去,从而提高学生的编程能力,激发学生对无线网络协议验证、改进和开发的兴趣。

一、NS2的介绍网络模拟是进行网络技术研究的一种基本手段,是指采用软件对网络的协议、拓扑和性能进行模拟分析。

网络模拟可以在硬件条件不具备的情况下帮助科研人员快速学习、设计、分析和改进协议和算法。

此外,网络模拟还可以在不需要建立实际网络系统的情况下比较、评估和验证新旧协议和算法的性能。

目前,常见的网络仿真软件主要有OPNET、SPD、Qualnet 和NS2等。

所有的仿真软件都支持有大量的网络协议,但是OPNET、SPD和Qualnet均为商业化产品,价格昂贵。

而NS2属于开源软件,有着良好的开放性和可扩展性,因此在网络模拟中使用最为广泛。

NS[2]是由UC Berkeley大学开发的一种面向对象的网络环境模拟器,来源于1989年的Real Network Simulator项目,目前最流行的是版本2,即NS2(Network Simulator 2)。

经过全世界各地研究者多年来不断的努力和完善,NS2已经成为一个涉及网络各个方面的优秀的网络模拟工具。

NS2集成的大量无线网络协议,以及其强大的二次开发能力使得NS2已经成为无线网络学术研究最常用的仿真平台。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

NS2机制浅显分析 [我在之前看的是以ping协议为实例来理解TclCL机制和分裂对象模型] 本文以channel实例的创建过程为例,试图说明ns2的分裂机制,请在阅读本文前阅读《The NS Manual》有关分裂机制章节,由于篇幅有限,作者能力有限,本文章不能分析得非常彻底,时间仓促,有不当之处请大家给予批评指正。

一、定义信道基类 定义channel的 C++类 #ns-2.31macchannel.h class Channel : public TclObject { public: Channel(void); virtual int command(int argc, const char*const* argv); ... ... ... }; 定义用于连接的类 #ns-2.31macchannel.cc static class ChannelClass : public TclClass { public: ChannelClass() : TclClass("Channel") {} TclObject* create(int, const char*const*) { return (new Channel); } }class_channel ; [注意]一个类声明为static,那么当ns刚开始初始化的时候,便会调用该类的构造函数,当静态变量class_channel 第一次被创建时,ns 将执行其构造函数,这就建立了适当的方法和解释类层次.具体解释请看第三节Otcl注册过程

二、Otcl注册过程 继续第一节,当ns初始化时会创建实体class_channel,它会调用类的构造函数ChannelClass() : TclClass("Channel") {}

首先执行TclClass:TclClass("Channel"),"Channel" 会传给参数此classname_ . 下面我们看一下TclClass()的具体实现 //->tclcl-1.19Tcl.cc TclClass* TclClass::all_; //[problem]什么意思? 在c++里 TclClass::TclClass(const char* classname) : class_(0), classname_(classname) { if (Tcl::instance().interp()!=NULL) { #解释器已经存在,解释器是一个动态连接库的一部分 bind(); # 变量绑定函数 } else { ... ... ... } } void TclClass::bind() { Tcl& tcl = Tcl::instance(); //获取Tcl 句柄 [参考1] tcl.evalf("SplitObject register %s", classname_); # $classname_ == "Channel" //上句利用句柄调用otcl命令,在Otcl环境中注册该类名:Channel 该类的父类是SpliteObject //SpliteObject是一个具有C++映像类的OTcl类,他是所有OTcl映像类的基类 # 注册了之后,为这个类添加两个命令:create-shadow和delete-shadow # 调用命令就是TclClass::create_shadow(),TclClass::delete_shadow(). class_ = OTclGetClass(tcl.interp(), (char*)classname_); //class_ OTclAddIMethod(class_, "create-shadow", (Tcl_CmdProc *) create_shadow, (ClientData)this, 0); OTclAddIMethod(class_, "delete-shadow", (Tcl_CmdProc *) delete_shadow, (ClientData)this, 0); otcl_mappings(); } 下边来讲讲我们在tcl脚本里自己能控制的实例化过程

四、实例化过程 然后当你在tcl 脚本中调用 new Channel时,ns2使用tclsh解释执行tcl脚本, 调用tcl函数new函数

//tclcl-1.19/tcl-object.tcl 146 proc new { className args } { set o [SplitObject getid] #得到一个新的分裂实体编号"_o*" _o*有类SplitObject 的变量 id 标识,从_o0开始 #可见在每一个Simulator对应的模拟中"_o*"标示唯一的一个分裂类实体, #也就是说,所有的分裂类实体都有自己的唯一标识 ,这个标识就是句柄 #注意SplitObject 与 TclObject 的关系 if [catch "$className create $o $args" msg] { #创建实体 if [string match "__FAILED_SHADOW_OBJECT_" $msg] { # 如果创建影像类失败,删除 o对象 delete $o return "" } global errorInfo error "class $className: constructor failed: $msg" $errorInfo } return $o }

但是SpliteObject并没有create函数, 所以动态调用其父类 Class 的 create 函数 Class instproc create {obj args} { # obj是 _oxxx了 set h [$self info heritage] # 取得类继承链测试结果是“SplitObject Object” foreach i [concat $self $h] { #沿着继承链从子类到父类递归产生相应实体 #concat后字符串为:”Channel SplitObject Object” if {[$i info commands alloc] != {}} then { # 判断命令alloc的是否存在 set args [eval [list $i] alloc [list $obj] $args] # 分配空间 $obj class $self eval [list $obj] init $args #调用init,最终导致shadow对象的产生 return $obj } } error {No reachable alloc} }

上面调用的init 会动态调用 SpliteObject instproc init() SplitObject instproc init args { $self next #调用类的create-shadow函数

if [catch "$self create-shadow $args"] { error "__FAILED_SHADOW_OBJECT_" "" } }

在这个例子中,动态调用了Channel instproc create_shadow函数,channel没有次函数,调用父类的,实质上最后调用了TclClass::create-shadow()函数,创建 int TclClass::create_shadow(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) { TclClass* p = (TclClass*)clientData; #把channel指针转换为父类型的指针

#在这里调用了ChannelClass::create()函数 #也就是调用了C++环境中的:new Channel 见函类ChannelClass定义 #到这里为止,otcl中的Channel的shadow object就生成了

TclObject* o = p->create(argc, argv); #动态调用那个create? Tcl& tcl = Tcl::instance(); if (o != 0) { o->name(argv[0]); tcl.enter(o); if (o->init(argc - 2, argv + 2) == TCL_ERROR) { tcl.remove(o); delete o; return (TCL_ERROR); } tcl.result(o->name());

# 在这里再次为otcl中的类Channel添加两个instproc:cmd和instvar # 其中cmd命令是用来运行处理未知命令机制的 # 这样的话,当你在ns脚本中输入了一个该类未知的命令, # Tcl的unknown机制就会调用该类的cmd命令 # 而这进一步的就会调用该类的shadow object的command()过程 # 所以在实现类的C++部分时,你必须实现该类的Command()过程 # 在command()中实现所有的命令分发 OTclAddPMethod(OTclGetObject(interp, argv[0]), "cmd", dispatch_cmd, (ClientData)o, 0); OTclAddPMethod(OTclGetObject(interp, argv[0]), "instvar", dispatch_instvar, (ClientData)o, 0); o->delay_bind_init_all(); return (TCL_OK); } else { tcl.resultf("new failed while creating object of class %s", p->classname_); return (TCL_ERROR); } }

相关文档
最新文档