注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

浩瀚星云

上善若水 厚德载物<学习版>

 
 
 

日志

 
 

透明网桥的自学习算法  

2014-09-21 18:35:03|  分类: 计算机网络基本原 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
#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");
                }
                    
                if(t!=1)//不在同一网段时
                {
                        
                  for(i=0;i<k1;i++)
                  if(a[i][0]==s) {break;}
                  //木有记录,在网桥数组中插入源地址
                  if(i==k1) {a[k1][0]=s;a[k1][1]=m-1;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(2==n) printf("网桥1丢弃\n");
                       //含有不在同一网段转发
                       else printf("不在同一网段,网桥1向左转发\n");
                   }
                }
             break;        
            }
        default: ;
    }
    
    putchar('\n');
    printf("网桥1\n");
    printf("--------\n");
    for(i=0;i<k1;i++)
    {
         printf("  %c  ",a[i][0]);
     printf("%d  ",a[i][1]);
     putchar('\n');
    }
    printf("--------\n");
    printf("网桥2\n");
    printf("--------\n");
    for(i=0;i<k2;i++)
    {
         printf("  %c  ",b[i][0]);
     printf("%d  ",b[i][1]);
     putchar('\n');
    }
    printf("-------\n");
    scanf("%c",&k);
   }
}

  评论这张
 
阅读(42)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017