1.host主機類
package FirstExpriment;
import java.util.HashMap;
import java.util.Map;
public class Host {
private String port;
private String mac;
public static Map<String,String>hostMap =new HashMap<>();
public Host(String mac,String port){
this.port =port;
this.mac =mac;
hostMap.put(mac,port);
}
public static void receiveBroadcast(String src,String dest){
if(src==null||dest==null) return;
for(Map.Entry<String ,String> entry : hostMap.entrySet()){
String curMac = entry.getKey();
String curPort = entry.getValue();
if(src.equals( curMac) ) continue;
if(dest.equals(curMac)){
System.out.println("地址"+curMac+"通過"+curPort+"接口收下了該幀");
}else{
System.out.println(curPort+"接口丟棄了該幀" ) ;
}
}
}
}
2、交換機類
package FirstExpriment;
import java.util.HashMap;
import java.util.Map;
import java.text.SimpleDateFormat;
public class exchangeMachine {
private Map<String ,String[]>exchangeTable =null;
public exchangeMachine(){
exchangeTable =new HashMap();
}
public void transferFrame(String frame){
String segment[];
segment = frame.split(" ");
String destMac = segment[0];
String srcMac = segment[1];
boolean isSrcExit =false;
boolean isDestExit =false;
for(Map.Entry<String ,String[]> entry:exchangeTable.entrySet()){
String curMac =entry.getKey();
if(srcMac.equals(curMac)){
isSrcExit=true;
}
if(destMac.equals(curMac)){
isDestExit =true;
}
if(isDestExit && isSrcExit)
break;
}
addAndUpdateExchangeTable(srcMac,isSrcExit) ;
if(isDestExit)
System.out.println("查找到目的地址"+destMac+",直接轉發信息");
else
Host.receiveBroadcast(srcMac,destMac);
}
private void addAndUpdateExchangeTable(String srcMac,boolean isSrcExit){
for(Map.Entry<String ,String>entry: Host.hostMap.entrySet() ){
String curMac = entry.getKey();
String curPort = entry.getValue();
if(srcMac.equals(curMac)){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String date = df.format(System.currentTimeMillis());
exchangeTable.put(curMac,new String[]{curPort,date});
if(!isSrcExit)
System.out.println("源目的Mac地址爲"+srcMac +",通過"+curPort+"端口"+"加入了交換表中,加入的有效時間爲"+date);
else
System.out.println("源目的Mac地址爲"+srcMac +",通過"+curPort+"端口"+"加入了交換表中,更新加入的有效時間爲"+date);
break;
}
}
}
}
3、網橋類
package FirstExpriment;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class netBridge {
public final static String inFilePath1 ="C:\\Users\\Lenovo\\Desktop\\1.txt";
public final static String inFilePath2 ="C:\\Users\\Lenovo\\Desktop\\2.txt";
public static void main(String args[]) throws IOException {
BufferedReader reader1=null;
BufferedReader reader2= null;
Host hosts[]=new Host[4];
initHosts(hosts);
exchangeMachine table =new exchangeMachine();
try {
reader1 = new BufferedReader(new InputStreamReader(new FileInputStream(inFilePath1), "UTF-8"));
reader2 = new BufferedReader(new InputStreamReader(new FileInputStream(inFilePath2), "UTF-8"));
String frame;
while (true) {
if ((frame = reader1.readLine()) != null && !frame.equals("") )
tableTransferFrame(table,frame);
else {
while ((frame = reader2.readLine()) != null && !frame.equals(""))
tableTransferFrame(table,frame);
break;
}
if ((frame = reader2.readLine()) != null && !frame.equals(""))
tableTransferFrame(table,frame);
else {
while ((frame = reader1.readLine()) != null && !frame.equals(""))
tableTransferFrame(table,frame);
break;
}
}
}
catch(Exception e){
e.printStackTrace();
}
finally{
reader1.close();
reader2.close();
}
}
public static void initHosts(Host hosts[]){
int length=hosts.length;
String hostName[] =new String[length];
String portName[]=new String[length];
for(int t=0;t<length;t++){
if(t<10) {
hostName[t] = "E8-2A-44-E8-E5-0" + t;
portName[t] = "000"+t;
}else{
hostName[t] = "E8-2A-44-E8-E5-"+t;
portName[t] = "00"+t;
}
hosts[t]=new Host(hostName[t],portName[t]);
}
}
private static void tableTransferFrame(exchangeMachine table, String frame){
table.transferFrame(frame);
System.out.println();
}
}