NS2使用小记----1

ns2使用小记---1




最近为了做实验,学习使用ns2做网络仿真。为了能讲学到的知识更好的理解,这里写写博客,消化吸收一下。
前面的博客里有如何在ubuntu下安装ns2。可以参考一下。


NS2网络仿真程序,既tcl脚本的结构大郅如下,基本上都会有类似的代码。
tcl脚本程序就是*.tcl的文本文件。


# "#"以后的文字是备注说明,NS2不会执行。


#产生一个仿真对象
set ns [new Simulator]


#定义一个结束的程序
proc finish {} {


exit 0
}


# 这里增加程序代码,如网络结构,应用程序设置等
# do something
#
#


#在适当的时间调用finish程序,结束仿真,这里是在5.0秒时结束。
$ns at 5.0 "finish"


#开始执行模拟
$ns run 




  有过编程基础的同鞋,基本上都能很快理解,只不过在具体的语法上可能与已知的知识不同罢了。下面就简单介绍一下tcl语言。


  tcl (Tool Command Language)在NS2中主要用来描述脚本,用来描述要仿真的网络环境和参数设置等。


  一条tcl指令的基本语法: command arg1 arg2 arg3 ...
  tcl只支持一种数据结构,字符串。所有命令,参数,结果,变量都是字符串。
  字符串有3中形式: 命令, 表达式, 列表。
  命令用换行符或者分号来分割。
  一个命令由域构成。第一个域是 命令名。
  域通常用空格来分开。
  如果一个参数由双引号开始,那么该参数会一直到下一个双引号才结束,其中可以有换行符和分号。
  当一个子域以方括号开始并以方括号结束时,表示要进行一个命令子替换。并执行该子命令,用其结果来替换原命令中的方括号部分。方括号中的部分斗被视为tcl 命令。
 


  这里的例子都编写在主目录的ex_.tcl文件中。
  1.变量和变量替换
  变量不用提前声明,set指派变量的值。unset用来取消。一般不用去unset。
  当取用或者改变变量内的值时,只要在变量名称前加“$”(美元符号),就可以取用或改变了。
  set aa "john"
  puts "my name is $aa."


  执行
  $ns ex_.tcl


  例子:
  a.

  set month 2
  set day 3
  set year 97
  set date "$month : $day : $year"
  puts $date
#
  b.
#
  set fo "puts hi"
  eval $fo
#
  
  eval 这个指令主要用于执行一个tcl脚本。所以"hi"输出到屏幕。


  2.表达式
  和大部分语言的运算符一样。


  !
  *, /, +, -, %
  <<, >>
  <, >, <=, >=, ==, !=
  &, ^, |
  &&, ||
  expr指令去判断真假或求值。
  1 : 真, 0 :假
  例子:
  a.


  set value [expr 0 == 1]
  puts $value


  b. 
  set value [expr 2 >= 1]
  puts $value




  3. 流程控制
  支持if else, while ,for , foreach, switch


  这里要强调 注意语法结构,该有空格就有空格。


  例子:
  a.
  set a "earth"
  if@{$a == "earth"}@{
puts "I feel right at home." 
  }@elseif {$a == "venus"}@{
puts "This is not my home."
  }@else@{
  puts "neither from earth nor from venus."
  }


  这里面容易出错的位置我都将空格替换成“@”,另外elseif这里一定要和前一个"}"在一行或者有续航符。否则会出错。


  b.


  set numleg 4
  switch $numleg {
2 {puts "human"}
4 {puts "cow"}
default {puts "anything"}
  }


  c.
 
  for {set i 1} {$i < 10} {incr i} {
  
puts "i == $i"
  }


  这里 “incr i” == “incr i 1”。如果步进是n,则“incr i n”。


  d.


  set i 0 
  while {$i < 5} {
puts "i == $i"
incr i 1
  }


  e.


  foreach vowel {a e i o u} {
puts "$vowel is a vowel"


  }




  4.函数


  proc 来声明函数。


  例子:
  proc sum_add {a b} {


return [expr $a + $b]
  }


  set num1 12
  set num2 14
  puts [sum_add $num1 $num2]


  5.数组
  不用事先定义好数组大小,而是可以无限增大数组容量。


  例子:
  a.


  set array(0)  "zero"
  set array(1)  "one"
  set array(2)  "two"


  for {set i 0} {$i <3} {incr i} {

puts $array($i)
  }


  b.


  set person_info(name) "fred"
  set person_info(age) "25"
  set person_info(occupation) "plumber"




  foreach thing {name age occupation} {
puts "$thing = = $person_info($thing)"
  }


  这里例子说明,tcl索引元素不一定是数字,可以是数字也可以是字符串,并且不用按“0,1,2,3..”去标号。


  c.


  set person_info(name) "fred"
  set person_info(age) "25"
  set person_info(occupation) "plumber"




  foreach thing [array names person_info] {


puts "$thing = = $person_info($thing)"
  }


  这里使用指令替代, [array names person_info],这样列出所有元素。对于数组容量很大的情况,这个方法比较好。




  6.输出
  puts 标准输出,前面的例子很多。这里说一下文件的操作。


  例子:
  a.
  set f [open "~/desktop/aa.txt" w]
  puts $f "we are here."
  puts $f "hello."
  close $f


  [open "~/desktop/aa.txt" w]
  打开    文件路径     操作类型
  没有该文件则创建,如果存在该文件,则清空该文件。
  和大多数的语言的写法差不多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值