一、实验内容

模拟实现网桥的转发功能,以从文件中读取帧模拟网桥从网络中收到一帧,即从两个文件中读入一系列帧,从第一个文件中读入一帧然后从第二个文件中再读入一帧,如此下去。对每一帧,显示网桥是否会转发。

要求:

Windows或Linux环境下运行,程序应在单机上运行。

分析:

用程序模拟网桥功能,可以假定用两个文件分别代表两个网段上的网络帧数据。而两个文件中的数据应具有帧的特征,即有目的地址,源地址和帧内数据。程序交替读入帧的数据,就相当于网桥从网段中得到帧数据,当然如果模拟的数据量比较少,也可以用两个数组代替两个文件存放帧数据,同样达到代表两个网段上的帧数据的效果。对于网桥来说,能否转发帧在于把接收到的帧与网桥中的转发表相比较。判断目的地址后才决定是否转发。由此可见转发的关键在于构造转发表。这里转发表可通过动态生成。

二、程序流程图

三、参考代码

package bridge;import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Scanner;public class Bridge {@SuppressWarnings("unused")public static void main(String[] args) {try(FileReader f1 = new FileReader("f1.txt");BufferedReader br1 = new BufferedReader(f1);   FileReader f2 = new FileReader("f2.txt");BufferedReader br2 = new BufferedReader(f2)) {Bridge bridge = new Bridge();Frame frame = bridge.new Frame();while(br1 != null || br2 != null) { if(br1 != null ) {frame.dstmac = br1.readLine();frame.srcmac = br1.readLine();if(frame.dstmac != null && frame.srcmac !=null) {bridge.rec(frame, "m0");}else {break;}}else {f1.close();}if(br2 != null) {frame.dstmac = br2.readLine();frame.srcmac = br2.readLine();if(frame.srcmac != null && frame.dstmac != null) {bridge.rec(frame, "m1");}else {break;}}else {f2.close();}}    }catch(Exception e) {e.printStackTrace();}
}   int max = 128;static int num = 0; String[][] table = new String[max][2];  //转发表:[地址][接口]class Frame{          String dstmac;     //目的mac地址String srcmac;     //源mac地址         }void show() {System.out.println("\t地址\t\t接口");int i,j;for(i=0;i<max-1;i++){for(j=0;j<2;j++) {if(table[i][j] != null) {System.out.print(table[i][j]+"\t");}} System.out.println();    if(table[i][1] == null) break;}System.out.println("------------------------------------------");}int srcinside(Frame frame) {    //判断源mac地址是否在转发表内,自学习 int i;for(i=0;i<=num;i++){if(frame != null && frame.srcmac.equals(table[i][0])) return 1;  //在内}return 0;   //不在}int dstinside(Frame frame)   //判断目的mac地址是否在转发表内{int i;for(i=0;i<=num;i++)if(frame != null && frame.dstmac.equals(table[i][0])) return i; //返回记录行return -1;    //不在}void update(Frame frame, String inter){table[num][0] = frame.srcmac;  //添加地址table[num][1] = inter;    //添加接口num++;}void rec(Frame frame,String inter){if(frame.srcmac != null && frame.dstmac != null) {System.out.println("从"+inter+"接口收到的帧,源地址为:"+frame.srcmac+",目的地址:"+frame.dstmac);if(dstinside(frame) == -1) {System.out.println("转发表内无该条目!从除"+inter+"的其余接口转发!");if(srcinside(frame) == 0) {update(frame, inter);  //自学习}}else {if(srcinside(frame) == 0) update(frame, inter);  //自学习System.out.print("转发表内找到匹配条目!");if(table[dstinside(frame)][1] == inter ) {System.out.println("由于在同一个接口,直接丢弃!");}              else {System.out.print("从"+table[dstinside(frame)][1]+"接口转发!");System.out.println();}}show();}}       }

四、运行结果

五、总结

首先先设置一个二维字符串数组作为转发表,转发表内容包括地址以及转发接口。其次,建立一个帧结构,帧内容包括:目的mac地址、源mac地址。最后,在实现的时候,为了编程简单和便于理解,文件中设置了帧的目的mac地址和源mac地址为一个字母。就通过不断从文件中交替,每次读取两行数据,与转发表进行比较。若转发表存在,则判断目的mac地址是否与源mac地址,是否在同一接口,相同则丢弃,不同则转发。若转发表不存在,则通过自学习,简单地将源mac地址和接口信息记录到转发表内,并转发到其他接口。

写一个程序来模拟网桥功能。相关推荐

  1. Java:假设车库有3个车位(可以通过boolean[]数组来表示车库)可以停车,写一个程序模拟多个用户开车离开,停车入库的效果。注意:车位有车时不能停车。

    假设车库有3个车位(可以通过boolean[]数组来表示车库)可以停车,写一个程序模拟多个用户开车离开,停车入库的效果.注意:车位有车时不能停车. 1)使用阻塞队列来实现(BlockingQueue& ...

  2. 利用输入输出流及文件类编写一个程序,可以实现在屏幕显示文本文件的功能,类似DOS命令中的type命令

    利用输入输出流及文件类编写一个程序,可以实现在屏幕显示文本文件的功能,类似DOS命令中的type命令 package p1;import java.io.BufferedReader; import ...

  3. C++实现类和对象:编写一个程序,模拟电梯的功能。功能接口包括电梯上行按钮、下行按钮、楼层选择和电梯在行驶过程中的楼层显示。

    浙江理工大学信息学院 面向对象程序设计实验报告 实验名称:类的定义与使用                      学时安排:3 实验类别:设计性实验                          ...

  4. JAVA:编写一个程序,模拟电梯得功能。功能接口包括电梯上行按钮、下行按钮、楼层选择与电梯在行驶过程中得楼层显示。

    编写一个程序,模拟电梯得功能.功能接口包括电梯上行按钮.下行按钮.楼层选择与电梯在行驶过程中得楼层显示. (1) 由用户选择按上行按钮还就是下行按钮,选择操作后再由用户输入要进入得楼层,进而电梯开始运 ...

  5. 女朋友生日java程序_★★女朋友要过生日了!我想用java为她写一个程序,一举两得啊! 希望大家多提建议啊!谢谢!!!...

    女朋友要过生日了,我想用java为她写一个程序,所以想请教大家,  希望大家给我出出点子, 同时手头有3D  等漂亮图形的java程序或其他一些特效的文字,图形java程序,都希望大家多提供,  多帮 ...

  6. 用汇编语言写一个程序,它先接收一个字符串,然后显示其中数字符的个数、英文字母的个数和字符串的长度

    ## 用汇编语言写一个程序,它先接收一个字符串,然后显示其中数字符的个数.英文字母的个数和字符串的长度 DATAS SEGMENT str1 db 0dh,0ah,'please enter a st ...

  7. 如何写一个程序,哄女朋友或者老婆开心?

    目录 1. 音乐播放.拍照和修图 2. 绘制爱心 3. 绘制熊猫 如何写一个程序,哄女朋友开心?下面有个列子 要编写一个让女朋友高兴的程序,需要考虑以下几点: 了解女朋友的兴趣爱好:如果女朋友喜欢音乐 ...

  8. JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数...

    第二题 已知有十六支男子足球队参加2008 北京奥运会.写一个程序,把这16 支球队随机分为4 个组.采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚 ...

  9. C语言试题九十一之写一个程序,用公式π/4=1-1/3+1/5-1/7+...,求π的近似值,直到最后一项的绝对值小于10^-8为止。

    1.题目 写一个程序,用公式π/4=1-1/3+1/5-1/7+...,求π的近似值,直到最后一项的绝对值小于10^-8为止. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生 ...

最新文章

  1. 2345电脑管家_极限挑战:同时安装4大国产杀毒软件,我的电脑是最安全的?
  2. oracle 字符集 0354,如何查询Oracle的字符集? 爱问知识人
  3. excel实战应用案例100讲(六)-社会判断理论:模型及应用
  4. NestedScrolling机制
  5. 哈佛学生是如何度过大学4年的(没有学习动力时候就看一遍)
  6. win7安装SP1补丁
  7. 科隆OPTIFLUX2100W/4100C分体式电磁流量计维修
  8. UE4蓝图基础04-变量和数组
  9. coon's patch
  10. java is alphabetic_java中的java.lang.Character类 – 方法| 2 - Break易站
  11. python自动化测试绕过手机验证码
  12. 常用计算机信息检索策略,信息检索的策略和方法
  13. 怎样批量替换Word中的文字?这一招Word文字替换技巧你会吗
  14. 【SAP消息号M8147】
  15. 台式计算机负荷,简单计算台式电脑功率
  16. 大学计算机专业实习报告
  17. 计算机考研没有获奖没有科研难吗,大学期间没有什么获奖经历和科研成果, 对考研的影响大吗?...
  18. 诸葛亮写给后代的一封信,只有86个字
  19. 90后准程序猿写给前辈们的一封信
  20. Java8新特性-Optional

热门文章

  1. 语义分割-深度学习算法总结(2018)-论文翻译(附带相关数据集)
  2. MuseScore通过快捷键添加的低八度符号显示异常
  3. 机器学习中标称型数据和数值型数据的区别
  4. vue input或者el-input苹果软键盘换行变成发送 安卓软键盘开始变成发送
  5. 中国陆地年降水量频率分布参数
  6. (基础练习)十六进制转八进制
  7. 使用c#访问Access数据库时,提示找不到可安装的 ISAM
  8. 嵌入式软件系统开发历程
  9. 从固化报表到自助分析,企业如何构建一站式大数据分析平台?
  10. git在commit之前切换分支