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

📄 display.java

📁 一个RIP协议模拟程序..在一个工作空间之内画上一些路由跟网络,再画上它们之间的连线.系统后台用一个线程实现模拟路由发送路由表信息.输出路由表的更新内容跟过程.
💻 JAVA
字号:
package network;

import java.util.ArrayList;

import javax.swing.JTextArea;

public class Display extends JTextArea implements Runnable{
	
	private Thread t=null;
	private GraphPanel graph;
	private ArrayList nodes;
	public Display(GraphPanel g){
		super();
		graph=g;
		nodes=g.getNodes();
		t=new Thread(this);
		t.start();
	}
	
	public void run(){
		int i=0;
		while(true){
			try{
				if(i<nodes.size()){
					Node n=(Node)nodes.get(i);
					this.setText(
							"结点"+n.getName()+"开始发送路由信息\n");
					ArrayList ls=n.getLinks();
					for(int j=0;j<ls.size();j++){
						Link l=(Link)ls.get(j);
						NetNode net=l.getNetNode();
						if(net.getStatus()==NetNode.distroy){
							n.destroy(net.getNetName());
							continue;
						}
						ArrayList netLinks=net.getLinks();
						for(int k=0;k<netLinks.size();k++){
							Link nl=(Link)netLinks.get(k);
							if(!nl.equals(l)){
								Node n2=nl.getN2();
								this.setText(this.getText() +
										"由路由"+n.getName()+"向路由"+n2.getName()+
										"发送路由表信息\n" +
										"更新前"+n2.getName()+"的路由信息为\n"+n2.toString()+"\n");
								sendTo(n,n2);
								this.setText(this.getText()+
										"更新后的路由表信息为\n"+n2.toString()+"\n");
							}
						}
					}
				}
				i++;
				if(i>=nodes.size()){
					i=0;
				}
				t.sleep(5000);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
	}
	private void sendTo(Node n1,Node n2){
		ArrayList ps=n1.getTable();
		ArrayList ps2=n2.getTable();
		for(int i=0;i<ps.size();i++){
			boolean added=false;
			Packet p1=(Packet)ps.get(i);
			for(int j=0;j<ps2.size();j++){
				Packet p2=(Packet)ps2.get(j);
				if(p2.getNetName().equals(p1.getNetName())){
					if(p2.getNextR().equals(n1.getName())){
						this.setText(this.getText()+
								"对于网络"+p2.getNetName()+",下一跳字段相同直接替换\n");
						p2.setStep(p1.getStep()+1);
						added=true;
					}
					else if(p2.getStep()>p1.getStep()+1){
						this.setText(this.getText()+
								"对于网络"+p2.getNetName()+",收到的项目中的距离小于路由表中的,进行更新\n");
						p2.setNextR(n1.getName());
						p2.setStep(p1.getStep()+1);
						added=true;						
					}
					else if(p2.getStep()<p1.getStep()+1){
						added=true;
					}
				}
			}
			if(!added){
				this.setText(this.getText()+"项目的目的网络不在路由表中,将该项目添加到路由表中\n");
				n2.addPacket(new Packet(p1.getNetName(),p1.getStep()+1,n1.getName()));
				
			}
		}
	}
}

⌨️ 快捷键说明

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