透明网桥的自学习算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

透明网桥的自学习算法#include<stdio.h>

void main()

{

char arr1[3]={'A','B','C'};

char arr2[2]={'D','E'};

char arr3[3]={'F','G','H'};

int a[][2]={0,0,0,0,0,0,0,0,0,0,0,0};

int b[][2]={0,0,0,0,0,0,0,0,0,0,0,0};

int i,j,m,n,k1 = 0,k2 = 0,t;

char s,d,k;

while(1)

{

printf("请输入源地址和目的地址:");

scanf("%c%c",&s,&d);

printf("\n");

for(i=0;i<3;i++){

if(arr1[i]==s)

m=1;

}

for(i=0;i<2;i++){

if(arr2[i]==s)

m=2;

}

for(i=0;i<3;i++){

if(arr3[i]==s)

m=3;

}

switch(m)

{

case 1:

{

for(i=0;i<k1;i++){

if(a[i][0]==s)

{break;}

}

if(i==k1) {a[k1][0]=s;a[k1][1]=m;k1++;}//没有记录,在网桥数组中插入源地址

for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址

{

if(a[i][0]==d)

{

n=a[i][1]; break;

}

}

if(i==k1) printf("网桥1中没有目的记录%c,向右转发\n",d);//不含有,转发

else

{

if(m==n){

printf("网桥1丢弃\n");t=1;

}//含有且在同在网段丢弃

else

printf("不在同一网段,网桥1向右转发\n");//含有不在同一网段转发

}

if(t!=1) //不在同一网段时

{

for(i=0;i<k1;i++)

if(b[i][0]==s) {break;}

if(i==k1) {b[k2][0]=s;b[k2][1]=m;k2++;}//没有记录,在网桥数组中插入源地址

for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址

{if(b[i][0]==d) {n=b[i][1]; break;}}

if(i==k2) printf("网桥2中没有目的记录%c,向右转发\n",d);//不含有,转发

else

{

if(m==n) printf("网桥2丢弃\n");//含有且在同在网段丢弃

else printf("不在同一网段,网桥2向右转发\n");//含有不在同一网段转发}

}

break;

}

case 2:

{

//向左转发

for(i=0;i<k1;i++)

if(a[i][0]==s) {break;}

if(i==k1) {a[k1][0]=s;a[k1][1]=m;k1++;}//没有记录,在网桥数组中插入源地址

for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址

{if(a[i][0]==d) {n=a[i][1]; break;}}

if(i==k1) printf("网桥1中没有目的记录%c,向左转发\n",d);//不含有,转发

else

{

if(m==n) printf("网桥1丢弃\n");//含有且在同在网段丢弃

else printf("不在同一网段,网桥1向左转发\n");//含有不在同一网段转发}

//向右转发

for(i=0;i<k2;i++)

if(b[i][0]==s) {break;}

if(i==k2) {b[k2][0]=s;b[k2][1]=m-1;k2++;}//没有记录,在网桥数组中插入源地址

for(i=0;i<k2;i++)//查找网桥数组中是否有目的地址

{if(b[i][0]==d) {n=b[i][1]; break;}}

if(i==k2) printf("网桥2中没有目的记录%c,向右转发\n",d);//不含有,转发

else

{

if(1==n) printf("网桥2丢弃\n");//含有且在同在网段丢弃

else printf("不在同一网段,网桥2向右转发\n");//含有不在同一网段转发}

break;

}

case 3:

{

for(i=0;i<k2;i++)

if(b[i][0]==s) {break;}

if(i==k2) {b[k2][0]=s;b[k2][1]=m-1;k2++;}//没有记录,在网桥数组中插入源地址

for(i=0;i<k2;i++)//查找网桥数组中是否有目的地址

{if(b[i][0]==d) {n=b[i][1]; break;}}

if(i==k2) printf("网桥2中没有目的记录,向左转发\n");//不含有,转发else

{

if(2==n) {printf("网桥2丢弃\n");t=1;}//含有且在同在网段丢弃

else printf("不在同一网段,网桥2向左转发\n");//含有不在

同一网段转发

相关文档
最新文档