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

原创 2004年05月01日 21:23:00

 

 

二,网络的建立<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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

 

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;

}

 

 

                                                       <未完>

 

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

  3,创建网络方法名称:              Net::ReCreate方法参数:             无返回值:               无方法的目的:               ...
  • PercyLee
  • PercyLee
  • 2004年05月01日 21:23
  • 910

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

 3,设置路由表方法名称:              CentralRout::SetRoutTable方法参数:             无返回值:               无方法的目的:   ...
  • PercyLee
  • PercyLee
  • 2004年05月01日 21:25
  • 1262

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

  2, 路由器从端口接收数据方法名称:              CentralRout::ReceiveData方法参数:             无返回值:               无方法的...
  • PercyLee
  • PercyLee
  • 2004年05月01日 21:25
  • 1156

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

                                          路由模拟系统 设计方案(二)                                            ...
  • PercyLee
  • PercyLee
  • 2004年05月01日 21:23
  • 1183

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

  五,路由过程         本实现部分为整个系统执行时序的表现,如果与通信模拟系统整合,本部分是不需要的。所以这部分是为单独调试而写的。为了检验路由模拟系统,写了一个单数据包路由的过程。但语义基...
  • PercyLee
  • PercyLee
  • 2004年05月01日 21:25
  • 1229

用MFC实现的路由分组转发模拟系统

系统设计网络拓扑 三个主机,三个路由(两两相通) 每个主机有一个IP地址和一个端口号。 每个路由维护一个路由表,表中存有到达特定网络终端(目标主机)的路径(下一(设备(路由))跳(的地址)),如...
  • jiaxingzheng
  • jiaxingzheng
  • 2015年03月14日 19:39
  • 1193

路由模拟——路由算法2的实现

 /* 算法说明:本实现的算法为Floyed算法,矩阵matrix(局部变量)存储源结点到其它结点的          最短路径,而result则存储返回结果——路由表。 参数说明:         ...
  • PercyLee
  • PercyLee
  • 2004年05月07日 15:53
  • 1664

QT-Socket编程之路由分组转发仿真

在之前的博客《QT-Socket编程之模拟TCP五层协议解/封装》中已经提到过基本的关于QTsocket编程实现的简易C/S模型,此次博客内容是建立在C/S基础上的。 内容: 模拟实现网络中路...
  • KoalaZB
  • KoalaZB
  • 2017年01月16日 22:02
  • 651

我的C/C++之路-005课(模拟路由表的路由选择功能)

#include #include /* 模拟路由表的路由选择功能:预先设置路由表,当有一个数据包到来的时候, 查看其目的地址,用该地址与路由表每项的子网掩码相与,若得到的地址与该项地址一致, 则把...
  • mzlqh
  • mzlqh
  • 2012年04月22日 20:54
  • 2724

电路设计_路由器方案比较

本文介绍了常见的路由器实现方案。
  • cc214042
  • cc214042
  • 2016年09月21日 00:03
  • 2526
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:路由模拟——设计方案的实现(2)
举报原因:
原因补充:

(最多只允许输入30个字)