3. 我们小组使用 java 来实现自学习算法,在实现算法前,我们首先构造了
几个实现算法所需要的类:
Computer 类 :定义主机的变量方法
String address;
Bus bus;//com 所连接的 bus
Data data;//接收到的数据
public Computer(String add){
this.address = add;
}
public void sendData(Data data)//通过总线广播
//调用 Bus 的 send()方法
public void receiveData(Data d)//接收 data
//检测 data 是否发送到该处,如果是,则接收(复制),否则丢弃
}
Bridge 类 :定义与网桥相关的变量方法
public class Bridge {
public Bus leftBus, rightBus;
public List<Map<String, String>> table = new
ArrayList<Map<String,String>>();
public Map<String, String> map_f, map_t;
public int f = 0, t = 0;
4. public void sendToRightBridge(Data data)
public void send(Data data)
Data 类 :定义传输的数据实体类
public class Data {
public String from,to,content;
public Bus bus;
public Data(String content,String to)
public Data(Data d) //拷贝构造方法
}
ImagePanel 类 :装载图片
public class ImagePanel extends JPanel {
/**
* 此方法是重写了 paintComponent 方法,来设置 JPanel 的背景
*/
private static final long serialVersionUID = 1L;
public void paintComponent(Graphics g)
}
MainFrame 类 :程序主面板 ,构建各组件
public class MainFrame extends JFrame implements ActionListener{
}
NetWork 类 :依照给定结构图 ,构建网桥
public NetWork() //构造方法,将预先定义的各主机,网桥,总线按照位置连接
public JTable getBridgeOneTable()//得到网桥 1 的转发表
public JTable getBridgeTwoTable()//得到网桥 2 的转发表
public void sendMessage(String from,String to,String content){ //from: 源地
址;to:目的地址
public void getMessage(String target){//获得指定主机的数据
5. 核心算法
public void receiveData(Data data){
//System.out.println("ssss" + this);
f = 0;t = 0;
for (Map<String,String> row:table){
if (row.get("address").equals(data.from)){
f = 1;
map_f = row;
break;
}
}
if (f == 0){
Map<String,String> map = new HashMap<String,String>();
map.put("address", data.from);
if(data.bus == leftBus)
map.put("location","left" );
else{
map.put("location","right" );
}
table.add(map);
map_f = map;
}
for (Map<String, String>row:table){
if (row.get("address").equals(data.to)){
t = 1;
map_t = row;
break;
}
}
if(t == 0){
if(data.bus == leftBus)
rightBus.rightSend(new Data(data));
else
leftBus.leftSend(new Data(data));
} else {
if(map_f.get("location").equals(map_t.get("location")))
;
else{
if(data.bus == leftBus)
rightBus.rightSend(new Data(data));
else
leftBus.leftSend(new Data(data));
6. }
}
首先判断源地址是否登记过,若无则登记,有则跳过登记。然后判断目地址地
址是否登记过,无则转发,若有,判断其接口与目的接口是否相同,相同则
丢弃,不同则转发。然后调用转发网桥的自学习方法。
实验结果截图:
实验结论 得分
由程序运行结果得出,主机 A 向 C 发送帧,1 号 2 号网桥均登记转发,将
A 主机记入进转发表。 主机 C 向 E 发送帧,1 号 2 号网桥均登记转发,将 C 主机
记入进转发表,E 向 C 发送帧,1 号 2 号网桥均登记主机 E,因为转发表中有 C
主机的记录,因此,1 号网桥转发,2 号网桥直接丢弃。从而实现网桥的自学
习功能。另外,当主机已存在转发表中,网桥则不再登记
教师评价 总分 实际得分