2017-02-10 55 views
0
for {set i 0} {$i < $num_nodes} {incr i} { 
    for {set j 0} {$j < 10} {incr j} { 
    $ns at [expr 7.2+[expr rand()*3.0]] "$n($i) send_message 10 1 {[expr round([expr rand()*100000])]:[expr round([expr rand()*$numdata1])]:1:-1:-1} $MESSAGE_PORT" 
    set generated1 [expr $generated1 + 1] 
    } 
} 

我建立的请求报文生成的代码在TCL NS2。我发现这些线路来自互联网,但我不明白这一行:请求数据包生成代码的NS2的Tcl/Tk

$ns at [expr 7.2+[expr rand()*3.0]] "$n($i) send_message 10 1 {[expr round([expr rand()*100000])]:[expr round([expr rand()*$numdata1])]:1:-1:-1} $MESSAGE_PORT" 

请告诉我这些线以上的逻辑是什么?

回答

0

首先,这是使用嵌套的expr。清洗,高达:

$ns at [expr {7.2+rand()*3.0}] "$n($i) send_message 10 1 {[expr {round(rand()*100000)}]:[expr {round(rand()*$numdata1)}]:1:-1:-1} $MESSAGE_PORT" 

寻找在该字的字:

  • $ns
  • at
  • [expr {7.2+rand()*3.0}]
    • 7.2和10.2
    • 之间的随机浮点值
  • "$n($i) send_message 10 1 {[expr {round(rand()*100000)}]:[expr {round(rand()*$numdata1)}]:1:-1:-1} $MESSAGE_PORT"
    • 引用的字符串,是受变量和命令替换(见Tcl(n)手册页)
    • 进一步看,我们有:
      • $n($i) < ==在一个关联数组值键$i
      • [expr {round(rand()*100000)}] < == 0和100,000之间的随机整数
      • [expr {round(rand()*$numdata1)}] < == 0和$numdata1

之间的随机整数的Tcl替换所有以后,我们可能有一些像

nsValue at 9.99934 "nValue send_message 10 1 {42:1234:1:-1:1} 8080"