NS3-命令行参数
參考書:《NS-3網絡模擬器基礎與應用》–馬春光、姚建盛
這里有電子版:鏈接: https://pan.baidu.com/s/1z7PpGkYKd6dt6pIwTfYj5g 密碼: kisn。如果百度網盤不騙我的話,應該是永久有效的。
命令行可以傳遞參數修改系統已有參數。
一、修改系統參數
ns-3還提供了另一種不需要重新編輯和構建腳本運行行為的方法。這種方法就是通過命令行傳遞參數來改變腳本中的變量。
不過在使用命令行系統前,首先要聲明一個命令行類的對象,然后調用Parse,具體方法如下:
這兩行代碼簡單明了,但是很重要。它意味著,用戶可以通過命令行來訪問代碼中的全局變量和ns-3中的屬性系統。我們在此基礎上稍微修改一下first.cc,在編譯時附加一些額外的信息,如下:
--PrintHelp: Print this help message. --PrintGroups: Print the list of groups. --PrintTypeIds: Print all TypeIds. --PrintGroup=[Group]:Print all TypeIds of group. --PrintAttributes=[typeid]: Print all attributes of typeid. --PrintGlobals: Print the list of globals.PrintAttributes這一項的功能就是掛載用戶想要修改的文件系統的屬性名。比如在這里:
PointToPointHelper pointToPoint;pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));就是first.cc中為建立物理連接所配置的信道屬性。接下來通過命令行對其重新賦值。
因為在腳本中用到的是PointToPoint類,因此可以通過命令行顯示該類在使用中所定義的默認值,不過在操作過程中是使用已經和網絡設備綁定的類PointToPointNetDevice中所涉及的屬性的默認值,操作如下:
可以看到一些默認的屬性。但是我們實際修改了DateRate的速率,5Mbps,我們分別使用默認值和5Mbps和默認值運行,看看有什么區別。
使用默認值(把DateRate賦值那句注釋掉)得到結果為:
由于把數據的發送速率從5Mbit/s減少到了32768bit/s,所以服務器收到數據的事件相應地推遲了一段時間。當然也可以通過命令行進一步修改這些屬性值。
二、自定義變量
我們可以添加自己的變量,然后通過鉤掛將其與命令行相關聯。
首先確定要鉤掛的變量,還是以first.cc為例:
這句命令的意思是限制了MaxPackets屬性是固定的,如果想把這段代碼改成可以在命令行編譯腳本時自定義,那么稍微給代碼整個容:
int main ( int argc, char *argv[] ) { Uin32_t nPackets = 1; // 添加一個變量 ComandLine cmd; //下行代碼使變量nPackets是可以在命令行里修改。 cmd.AddValue("nPackets", "Number of packets to echo", nPackets); cmd.Parse (argc, argv); //這個代碼一定要放在上述三行代碼之后 ...然后下面代碼做如下修改,用nPackets代替常量1,這樣就能傳參了:
echoClient.SetAttribute ( "MaxPackets",UnitegerValue(nPackets));我們再編譯first》cc腳本,并且提供命令行參數: --PrintHelp 如下:
這時候多了一個Program Arguments, 這就是我們設置的參數。現在對參數進行一下修改,設置發送兩次分組:
注意 "–nPackets=2"不要打空格。這里的輸出結果和nPackets=1時有很大區別,這里客戶端發送了兩次分組,而之前只發送了一次分組。
總結
- 上一篇: 企业选用什么云服务器适合
- 下一篇: socket编程流程与函数(实用篇)