路由模拟——设计方案的实现(2)

类别:VC语言 点击:0 评论:0 推荐:

 

 

二,网络的建立

网络的建立都是针对中心路由器的高速网络,任意复杂网络可以扩充实现。另外本方案部分代码是为单独调试、运行而写的,在与通信模拟系统整合时要重写部分代码。 

 

1,获得网络信息

方法名称:              Net::GetNetInfor

方法参数:             无

返回值:               无

方法的目的:                获得网络的信息,包括网络的拓扑信息,耗散信息,以及有可能包括的路由器类型向量与网络线路类型向量。本实现方案为简单情形,从文件中读取这些信息。如果与通信模拟系统进行整合,则调用通信模拟系统提供的接口来获得这些信息,可重写代码。

可能的出错:           文件操作失败:系统退出。

// 获得网络信息

void Net::GetNetInfor(void)

{

     int _routNum=-1;

     int _lineNum=-1;

     std::fstream file;

     char *fileName="netinfor.txt";

 

     file.open(fileName,std::ios_base::in|std::ios_base::out);

     if(file.fail())
     {
          std::cout<<"\n\n文件("<<fileName<<") 打开失败.\n\n";
          char ch;
          std::cin>>ch;
          exit(-1);
     }

     //这里是从文件中获得网络信息的,可以从通信模拟系统中直接获得,

     //可另外实现。目前代码只考虑主干网的信息。复杂网络可以扩充实现。

     ////////////////////////////////////////////////////////////////

 

     file>>_routNum;

     file>>_lineNum;

     routNum=_routNum;

     lineNum=_lineNum;

 

     // 申请内存资源

     netArray = new int *[routNum];

     for(int i=0;i<routNum;i++)

          netArray[i] = new int[routNum];

 

     valArray = new int *[routNum];

     for(int i=0;i<routNum;i++)

          valArray[i] = new int[routNum];

 

     routTypes = new NetElementType[routNum];

     lineTypes = new NetElementType[lineNum];

     //读文件获得网络信息:仅包括拓扑信息与耗散信息

    for(int i=0;i<routNum;i++)

        for(int j=0;j<routNum;j++)

            file>>netArray[i][j];

          

     for(int i=0;i<routNum;i++)

        for(int j=0;j<routNum;j++)

            file>>valArray[i][j];

 

     file.close();

}

2,判断网络是否发生改变

方法名称:              Net::IsChanged

方法参数:             无

返回值:               bool类型,为true则网络信息发生改变,否则未改变。

方法的目的:                判断网络信息是否发生改变,以决定是否需重新建立网络。网络初建时认为网络信息已发生改变。本方案的实现仍为简洁方式,复杂网络或与通信模拟系统整合时仍需要重写部分代码。

可能的出错:           文件操作失败:系统退出。

// 判断网络是否发生改变

bool Net::IsChanged(void)

{

     if(first){//网络初建

          first=false;

         return true;

     }

     

     /*注释的代码是从通信系统直接获得网络信息的判断方式

     if(routNum!=...|| lineNum!=...)

         return true;

 

     for(int i=0;i<routNum;i++)

          for(int j=0;j<routNum;j++)

              if(netArray[i][j]!=... || valArray[i][j]!=...)

                   return true;

     */

 

     int _routNum=-1;

     int _lineNum=-1;

     std::fstream file;

     char *fileName="netinfor.txt";

 

     file.open(fileName,std::ios_base::in|std::ios_base::out);

     if(file.fail())
     {
          std::cout<<"\n\n文件("<<fileName<<") 打开失败.\n\n";
          char ch;
          std::cin>>ch;
          exit(-1);
     }

 

     file>>_routNum;

     file>>_lineNum;

     if(routNum!=_routNum || lineNum!=_lineNum )

     {//判断路由器数量与线路数量

          file.close();

         return true;

     }

 

     //判断网络信息中相临矩阵与耗散矩阵是否发生改变

     int value;

     for(int i=0;i<routNum;i++)

        for(int j=0;j<routNum;j++)

        {

            file>>value;

            if(netArray[i][j]!=value)

            {

                 file.close();

                 return true;

            }

        }

          

     for(int i=0;i<routNum;i++)

        for(int j=0;j<routNum;j++)

        {

            file>>value;

            if(valArray[i][j]!=value)

            {

                 file.close();

                 return true;

            }

        }

 

   //网络信息没有发生改变

     file.close();

     return false;

}

 

 

                                                       <未完>

 

本文地址:http://com.8s8s.com/it/it966.htm