udpdata.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (C) 2001 by USC/ISI
  3. # All rights reserved.                                            
  4. #                                                                
  5. # Redistribution and use in source and binary forms are permitted
  6. # provided that the above copyright notice and this paragraph are
  7. # duplicated in all such forms and that any documentation, advertising
  8. # materials, and other materials related to such distribution and use
  9. # acknowledge that the software was developed by the University of
  10. # Southern California, Information Sciences Institute.  The name of the
  11. # University may not be used to endorse or promote products derived from
  12. # this software without specific prior written permission.
  13. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  14. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  15. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16. # @(#) $Header: /cvsroot/nsnam/ns-2/tcl/ex/udpdata.tcl,v 1.1 2001/11/20 21:46:38 buchheim Exp $ (USC/ISI)
  17. #
  18. #  This is a simple demonstration of how to send data in UDP datagrams
  19. #
  20. set ns [new Simulator]
  21. $ns color 0 blue
  22. $ns color 1 red
  23. # open trace files
  24. set f [open out.tr w]
  25. $ns trace-all $f
  26. set nf [open out.nam w]
  27. $ns namtrace-all $nf
  28. # create topology.  three nodes in line: (0)--(2)--(1)
  29. set n0 [$ns node]
  30. set n1 [$ns node]
  31. set n2 [$ns node]
  32. $ns duplex-link $n0 $n2 2Mb 5ms DropTail
  33. $ns duplex-link $n2 $n1 1.5Mb 10ms DropTail
  34. $ns duplex-link-op $n0 $n2 orient right
  35. $ns duplex-link-op $n2 $n1 orient right
  36. # create UDP agents
  37. set udp0 [new Agent/UDP]
  38. $ns attach-agent $n0 $udp0
  39. set udp1 [new Agent/UDP]
  40. $ns attach-agent $n1 $udp1
  41. $ns connect $udp0 $udp1
  42. # The "process_data" instance procedure is what will process received data
  43. # if no application is attached to the agent.
  44. # In this case, we respond to messages of the form "ping(###)".
  45. # We also print received messages to the trace file.
  46. Agent/UDP instproc process_data {size data} {
  47. global ns
  48. $self instvar node_
  49. # note in the trace file that the packet was received
  50. $ns trace-annotate "[$node_ node-addr] received {$data}"
  51. # if the message was of the form "ping(###)" then send a response of
  52. # the form "pong(###)"
  53. if {[regexp {ping *(([0-9]+))} $data entirematch number]} {
  54. $self send 100 "pong($number)"
  55. } elseif {[regexp {countdown *(([0-9]+))} $data entirematch number]
  56.   && $number > 0 } {
  57. incr number -1
  58. $self send 100 "countdown($number)"
  59. }
  60. }
  61. # Setting the class allows us to color the packets in nam.
  62. $udp0 set class_ 0
  63. $udp1 set class_ 1
  64. # Now, schedule some messages to be sent, using the UDP "send" procedure.
  65. # The first argument is the length of the data and the second is the data
  66. # itself.  Note that you can lie about the length, as we do here.  This allows
  67. # you to send packets of whatever size you need in your simulation without
  68. # actually generating a string of that length.  Also, note that the length
  69. # you specify must not be larger than the maximum UDP packet size (the default
  70. # is 1000 bytes)
  71. # if the send procedure is called without a second argument (e.g. "send 100")
  72. # then a packet of the specified length (or multiple packets, if the number
  73. # is too high) will be sent, but without any data.  In that case, process_data
  74. # will not be called at the receiver.
  75. $ns at 0.1 "$udp0 send 724 ping(42)"
  76. $ns at 0.2 "$udp1 send 100 countdown(5)"
  77. $ns at 0.3 "$udp0 send 500 {ignore this message please}"
  78. $ns at 0.4 "$udp1 send 828 {ping  (12345678)}"
  79. $ns at 1.0 "finish"
  80. proc finish {} {
  81. global ns f nf
  82. $ns flush-trace
  83. close $f
  84. close $nf
  85. puts "running nam..."
  86. exec nam out.nam &
  87. exit 0
  88. }
  89. $ns run