⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nsg.java

📁 用JAVA做的一个NSG仿真程序,可以在一个工作空间里面画一个虚拟的网络环境,然后根据环境生成TCL代码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        ping_no.setText("0");
        node_no.setText("0");
        System.gc();
        env.repaint();
    }

    void generate()
    {
        dirty = false;
        String s = (String)macBox.getSelectedItem();
        generateGlobeVariables();
        tclArea.append("#===================================\n");
        tclArea.append("#               \u5EFA\u7ACB\u76F8\u95DC\u6A94\u6848                         \n");
        tclArea.append("#===================================\n");
        tclArea.append("\n");
        tclArea.append("#\u8A2D\u5B9Atrace file\n");
        tclArea.append("set ns            [new Simulator]\t;#\u7522\u751Fns simulator\n");
        tclArea.append((new StringBuilder("set tracefd       [open mac_")).append(s).append("_node_").append(node_no.getText()).append("_ftp_").append(ftp_no.getText()).append("_cbr_").append(cbr_no.getText()).append("_ping_").append(ping_no.getText()).append(".tr w]\t;#\u7522\u751Ftrace file\n").toString());
        tclArea.append((new StringBuilder("set namtrace       [open mac_")).append(s).append("_node_").append(node_no.getText()).append("_ftp_").append(ftp_no.getText()).append("_cbr_").append(cbr_no.getText()).append("_ping_").append(ping_no.getText()).append(".nam w]\t;#\u7522\u751F\u7522\u751Fnam trace file\n").toString());
        tclArea.append("\n");
        tclArea.append("$ns trace-all $tracefd\n");
        tclArea.append("$ns namtrace-all-wireless $namtrace $val(x) $val(y)\n");
        tclArea.append("\n");
        tclArea.append("set topo       [new Topography]\t    ;#\u7522\u751Ftopography object\n");
        tclArea.append("$topo load_flatgrid $val(x) $val(y)\n");
        tclArea.append("\n");
        tclArea.append("create-god $val(nn)\n");
        tclArea.append("\n");
        generateChannels();
        generateMobileNodeConfig();
        generateNodes();
        generateLinks();
        generateStopProc();
        tclArea.append("$ns run\n");
    }

    private void generateStopProc()
    {
        tclArea.append("#===================================\n");
        tclArea.append("#              \u7D50\u675F\u6A21\u64EC                                   \n");
        tclArea.append("#===================================\n");
        tclArea.append("\n");
        tclArea.append("#\u8A2D\u5B9APing\u5C08\u7528\u7684recv function\n");
        tclArea.append("Agent/Ping instproc recv {from rtt} {\n");
        tclArea.append("    $self instvar node_\n");
        tclArea.append("    puts \"node [$node_ id] received ping answer from $from with round-trip-time $rtt ms.\"\n");
        tclArea.append("}\n");
        tclArea.append("\n");
        tclArea.append("# \u544A\u8A34MobileNode\u6A21\u64EC\u5DF2\u7D50\u675F\n");
        tclArea.append("for {set i 0} {$i < $val(nn) } { incr i } {\n");
        tclArea.append("    $ns at $val(stop) \"$node_($i) reset\";\n");
        tclArea.append("}\n");
        tclArea.append("\n");
        tclArea.append("# \u7D50\u675Fnam\u8207\u6A21\u64EC\u5668\n");
        tclArea.append("$ns at $val(stop) \"$ns nam-end-wireless $val(stop)\"\n");
        tclArea.append("$ns at $val(stop) \"stop\"\n");
        tclArea.append((new StringBuilder("$ns at ")).append(Double.parseDouble(simStopField.getText()) + 0.10000000000000001D).append(" \"puts \\\"end simulation\\\" ; $ns halt\"\n").toString());
        tclArea.append("\n");
        tclArea.append("# \u8A2D\u5B9A\u6A21\u64EC\u5668\u7528\u7684stop function\n");
        tclArea.append("proc stop {} {\n");
        tclArea.append("    global ns tracefd namtrace\n");
        tclArea.append("    $ns flush-trace\n");
        tclArea.append("    close $tracefd\n");
        tclArea.append("    close $namtrace\n");
        tclArea.append("}\n");
        tclArea.append("\n");
    }

    private void generateMobileNodeConfig()
    {
        tclArea.append("#===================================\n");
        tclArea.append("#        \u8A2D\u5B9AMobileNode\u7684\u53C3\u6578                      \n");
        tclArea.append("#===================================\n");
        tclArea.append("\n");
        tclArea.append("#\u8A2D\u5B9AMobileNode\u7684\u53C3\u6578\n");
        tclArea.append("$ns node-config -adhocRouting $val(rp) \\\n");
        tclArea.append("                -llType $val(ll) \\\n");
        tclArea.append("                -macType $val(mac) \\\n");
        tclArea.append("                -ifqType $val(ifq) \\\n");
        tclArea.append("                -ifqLen $val(ifqlen) \\\n");
        tclArea.append("                -antType $val(ant) \\\n");
        tclArea.append("                -propType $val(prop) \\\n");
        tclArea.append("                -phyType $val(netif) \\\n");
        tclArea.append("                -channel $chan0 \\\n");
        tclArea.append("                -topoInstance $topo \\\n");
        tclArea.append("                -agentTrace OFF \\\n");
        tclArea.append("                -routerTrace OFF \\\n");
        tclArea.append("                -macTrace ON \\\n");
        tclArea.append("                -movementTrace OFF\n");
        tclArea.append("\n");
    }

    private void generateLinks()
    {
        tclArea.append("#===================================\n");
        tclArea.append("#               \u8A2D\u5B9A\u9023\u7DDA                                 \n");
        tclArea.append("#===================================\n");
        tclArea.append("\n");
        int i = 0;
        for(Iterator iterator = links.iterator(); iterator.hasNext();)
        {
            Link link = (Link)(Link)iterator.next();
            switch(link.getType())
            {
            case 0: // '\0'
                tclArea.append((new StringBuilder("#\u8A2D\u5B9A\u7B2C")).append(i).append("\u500B\u9023\u7DDA(FTP-TCP)\n").toString());
                tclArea.append((new StringBuilder("set tcp")).append(i).append(" [new Agent/TCP/Newreno]\n").toString());
                tclArea.append((new StringBuilder("$tcp")).append(i).append(" set class_ 2\n").toString());
                tclArea.append((new StringBuilder("set sink")).append(i).append(" [new Agent/TCPSink]\n").toString());
                tclArea.append((new StringBuilder("$ns attach-agent $node_(")).append(link.getSrc().getId()).append(") $tcp").append(i).append("\n").toString());
                tclArea.append((new StringBuilder("$ns attach-agent $node_(")).append(link.getDst().getId()).append(") $sink").append(i).append("\n").toString());
                tclArea.append((new StringBuilder("$ns connect $tcp")).append(i).append(" $sink").append(i).append("\n").toString());
                tclArea.append((new StringBuilder("set ftp")).append(i).append(" [new Application/FTP]\n").toString());
                tclArea.append((new StringBuilder("$ftp")).append(i).append(" attach-agent $tcp").append(i).append("\n").toString());
                tclArea.append((new StringBuilder("$ns at ")).append(link.getStart()).append(" \"$ftp").append(i).append(" start\"\n").toString());
                tclArea.append((new StringBuilder("$ns at ")).append(link.getStop()).append(" \"$ftp").append(i).append(" stop\"\n").toString());
                tclArea.append("\n");
                break;

            case 2: // '\002'
                tclArea.append((new StringBuilder("#\u8A2D\u5B9A\u7B2C")).append(i).append("\u500B\u9023\u7DDA(CBR-UDP)\n").toString());
                tclArea.append((new StringBuilder("set udp")).append(i).append(" [new Agent/UDP]\n").toString());
                tclArea.append((new StringBuilder("$ns attach-agent $node_(")).append(link.getSrc().getId()).append(") $udp").append(i).append("\n").toString());
                tclArea.append((new StringBuilder("set null")).append(i).append(" [new Agent/Null]\n").toString());
                tclArea.append((new StringBuilder("$ns attach-agent $node_(")).append(link.getDst().getId()).append(") $null").append(i).append("\n").toString());
                tclArea.append((new StringBuilder("$ns connect $udp")).append(i).append(" $null").append(i).append("\n").toString());
                tclArea.append((new StringBuilder("$udp")).append(i).append(" set fid_ 2\t;#\u5728NAM\u4E2D\uFF0CUDP\u7684\u9023\u7DDA\u6703\u4EE5\u7D05\u8272\u8868\u793A\n").toString());
                tclArea.append((new StringBuilder("set cbr")).append(i).append(" [new Application/Traffic/CBR]\t;#\u5728UDP\u9023\u7DDA\u4E4B\u4E0A\u5EFA\u7ACBCBR\u61C9\u7528\u7A0B\u5F0F\n").toString());
                tclArea.append((new StringBuilder("$cbr")).append(i).append(" attach-agent $udp").append(i).append("\n").toString());
                tclArea.append((new StringBuilder("$cbr")).append(i).append(" set type_ CBR\n").toString());
                tclArea.append((new StringBuilder("$cbr")).append(i).append(" set packet_size_ ").append(link.getFrame_size()).append(";#\u8A2D\u5B9A\u5C01\u5305\u5927\u5C0F\n").toString());
                tclArea.append((new StringBuilder("$cbr")).append(i).append(" set rate_ ").append(link.getRate()).append(" ;#\u8A2D\u5B9A\u50B3\u8F38\u901F\u7387\n").toString());
                tclArea.append((new StringBuilder("$cbr")).append(i).append(" set random_ false\n").toString());
                tclArea.append((new StringBuilder("$ns at ")).append(link.getStart()).append(" \"$cbr").append(i).append(" start\"\n").toString());
                tclArea.append((new StringBuilder("$ns at ")).append(link.getStop()).append(" \"$cbr").append(i).append(" stop\"\n").toString());
                tclArea.append("\n");
                break;

            case 1: // '\001'
                tclArea.append((new StringBuilder("#\u8A2D\u5B9A\u7B2C")).append(i).append("\u500B\u9023\u7DDA(Ping)\n").toString());
                tclArea.append((new StringBuilder("set ping_a(")).append(i).append(") [new Agent/Ping]\n").toString());
                tclArea.append((new StringBuilder("$ns attach-agent $node_(")).append(link.getSrc().getId()).append(") $ping_a(").append(i).append(")\n").toString());
                tclArea.append((new StringBuilder("set ping_b(")).append(i).append(") [new Agent/Ping]\n").toString());
                tclArea.append((new StringBuilder("$ns attach-agent $node_(")).append(link.getDst().getId()).append(") $ping_b(").append(i).append(")\n").toString());
                tclArea.append((new StringBuilder("$ns connect $ping_a(")).append(i).append(") $ping_b(").append(i).append(")\t;#\u9023\u7D50\u4E8C\u500BPing Agents\n").toString());
                tclArea.append((new StringBuilder("$ns at ")).append(link.getStart()).append(" \"$ping_a(").append(i).append(") send\"\t;#\u8A2D\u5B9APing\u7684\u6642\u9593\n").toString());
                tclArea.append("\n");
                break;
            }
            i++;
        }

    }

    private void generateNodes()
    {
        tclArea.append("#===================================\n");
        tclArea.append("#             \u7522\u751FNode              \n");
        tclArea.append("#===================================\n");
        tclArea.append("\n");
        Iterator iterator = nodes.iterator();
        for(int i = 0; iterator.hasNext(); i++)
        {
            Node node = (Node)(Node)iterator.next();
            tclArea.append((new StringBuilder("#\u5EFA\u7ACB\u7B2C")).append(i).append("\u500BNode\n").toString());
            tclArea.append((new StringBuilder("set node_(")).append(node.getId()).append(") [$ns node]\n").toString());
            tclArea.append((new StringBuilder("$node_(")).append(node.getId()).append(") set X_ ").append(node.getX()).append("\n").toString());
            tclArea.append((new StringBuilder("$node_(")).append(node.getId()).append(") set Y_ ").append(node.getY()).append("\n").toString());
            tclArea.append((new StringBuilder("$node_(")).append(node.getId()).append(") set Z_ 0.0\n").toString());
            tclArea.append((new StringBuilder("$ns initial_node_pos $node_(")).append(node.getId()).append(") 20\n").toString());
            tclArea.append("\n");
        }

    }

    private void generateChannels()
    {
        tclArea.append("#\u5EFA\u7ACBchannel\n");
        tclArea.append("set chan0 [new $val(chan)]\n");
        tclArea.append("\n");
    }

    private void generateGlobeVariables()
    {
        String s = (String)macBox.getSelectedItem();
        String s1 = (String)routingBox.getSelectedItem();
        tclArea.setText("# This script is created by P.L. Wu <wupl@cse.nsysu.edu.tw>\n");
        tclArea.append("#===================================\n");
        tclArea.append("#              \u5B9A\u7FA9\u6A21\u64EC\u8B8A\u6578                           \n");
        tclArea.append("#===================================\n");
        tclArea.append("\n");
        tclArea.append("set val(chan)   Channel/WirelessChannel    ;# channel type\n");
        tclArea.append("set val(prop)   Propagation/TwoRayGround   ;# radio-propagation model\n");
        tclArea.append("set val(netif)  Phy/WirelessPhy            ;# network interface type\n");
        tclArea.append((new StringBuilder("set val(mac)    Mac/")).append(s).append("            ;# MAC type\n").toString());
        tclArea.append("set val(ifq)    Queue/DropTail/PriQueue    ;# interface queue type\n");
        tclArea.append("set val(ll)     LL                         ;# link layer type\n");
        tclArea.append("set val(ant)    Antenna/OmniAntenna        ;# antenna model\n");
        tclArea.append("set val(ifqlen) 50                         ;# max packet in ifq\n");
        tclArea.append((new StringBuilder("set val(nn)     ")).append(nodes.size()).append("        ;# number of mobilenodes\n").toString());
        tclArea.append((new StringBuilder("set val(rp)     ")).append(s1).append("     ;# routing protocol\n").toString());
        tclArea.append((new StringBuilder("set val(x)      ")).append(envWidth).append("            ;# X dimension of topography\n").toString());
        tclArea.append((new StringBuilder("set val(y)      ")).append(envHeight).append("           ;# Y dimension of topography\n").toString());
        tclArea.append((new StringBuilder("set val(stop)   ")).append(simStopField.getText()).append(" ;# time of simulation end\n").toString());
        tclArea.append("\n");
    }

    private boolean saveTclFileAs()
    {
        if(dirty)
        {
            int i = JOptionPane.showConfirmDialog(this, "\u7DE8\u8F2F\u5F8C\u5C1A\u672A\u7522\u751FTCL\u6A94, \u662F\u5426\u7522\u751F\u5F8C\u518D\u5B58\u6A94?", "\u5C1A\u672A\u7522\u751FTCL\u6A94!", 0);
            if(i == 0)
                generate();
        }
        try
        {
            tcljfc.setDialogTitle("\u8ACB\u9078\u64C7\u8981\u5132\u5B58\u7684\u6A94\u6848");
            int j = tcljfc.showSaveDialog(this);
            if(j == 0)
            {
                tclFile = tcljfc.getSelectedFile();
                if(!tclFile.getAbsolutePath().endsWith("tcl"))
                    tclFile = new File((new StringBuilder(String.valueOf(tclFile.getAbsolutePath()))).append(".tcl").toString());
                saveTclFile();
                return true;
            } else
            {
                return false;
            }
        }
        catch(Exception exception)
        {
            System.out.println(exception.getMessage());
        }
        return false;
    }

    private boolean saveTclFile()
    {
        if(dirty)
        {
            int i = JOptionPane.showConfirmDialog(this, "\u7DE8\u8F2F\u5F8C\u5C1A\u672A\u7522\u751FTCL\u6A94, \u662F\u5426\u7522\u751F\u5F8C\u518D\u5B58\u6A94?", "\u5C1A\u672A\u7522\u751FTCL\u6A94!", 0);
            if(i == 0)
                generate();
        }
        try
        {
            if(tclFile == null && !saveTclFileAs())
            {
                return false;
            } else
            {
                OutputStreamWriter outputstreamwriter = new OutputStreamWriter(new FileOutputStream(tclFile));
                outputstreamwriter.write(tclArea.getText());
                outputstreamwriter.close();
                return true;
            }
        }
        catch(Exception exception)
        {
            System.out.println(exception.getMessage());
        }
        return false;
    }

    private boolean loadScenario()
    {
        try
        {
            scnjfc.setDialogTitle("\u8ACB\u9078\u64C7\u8981\u5132\u5B58\u7684\u6A94\u6848");
            int i = scnjfc.showSaveDialog(this);
            if(i == 0)
            {
                scnFile = scnjfc.getSelectedFile();
                scnFilePath.setText(scnFile.getAbsolutePath());
                FileInputStream fileinputstream = new FileInputStream(scnFile);
                ObjectInputStream objectinputstream = new ObjectInputStream(fileinputstream);
                nodes = (Vector)objectinputstream.readObject();
                links = (Vector)objectinputstream.readObject();
                objectinputstream.close();
                env.setNodes(nodes);
                env.setLinks(links);
                env.repaint();
                System.gc();
            }
        }
        catch(Exception exception)
        {
            System.out.println(exception.getMessage());
            return false;
        }
        return true;
    }

    private boolean saveScenario()
    {
        try
        {
            FileOutputStream fileoutputstream = new FileOutputStream(scnFile);
            ObjectOutputStream objectoutputstream = new ObjectOutputStream(fileoutputstream);
            objectoutputstream.writeObject(nodes);
            objectoutputstream.writeObject(links);
            objectoutputstream.close();
        }
        catch(Exception exception)
        {
            System.out.println(exception.getMessage());
            return false;
        }
        return true;
    }

    private boolean saveScenarioAs()
    {
        try
        {
            scnjfc.setDialogTitle("\u8ACB\u9078\u64C7\u8981\u5132\u5B58\u7684\u6A94\u6848");
            int i = scnjfc.showSaveDialog(this);
            if(i == 0)
            {
                scnFile = scnjfc.getSelectedFile();
                scnFilePath.setText(scnFile.getAbsolutePath());
                FileOutputStream fileoutputstream = new FileOutputStream(scnFile);
                ObjectOutputStream objectoutputstream = new ObjectOutputStream(fileoutputstream);
                objectoutputstream.writeObject(nodes);
                objectoutputstream.writeObject(links);
                objectoutputstream.close();
            }
        }
        catch(Exception exception)
        {
            System.out.println(exception.getMessage());
            return false;
        }
        return true;
    }

    public static void main(String args[])
    {
        NSG nsg = new NSG();
        nsg.setBounds(0, 0, 800, 700);
        nsg.setDefaultCloseOperation(3);
        nsg.setExtendedState(6);
        nsg.setVisible(true);
    }








}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -