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調用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");總結
以上是生活随笔為你收集整理的NS2相关学习——完成一个新的协议(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转载:tcpdump抓包和Wiresha
- 下一篇: java中wait的场景,wait——w