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

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

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

方法名称:              Net::ReCreate

方法参数:            

返回值:              

方法的目的:                重新创建网络(包含首次创建)。如果网络信息发生改变,则释放内存资源,重新获得网络信息,构建网络数据结构pNodeArray。同时此方法在获得网络信息的同时,填写一个重要的中间表:路由器标号与地址对映表。本方案实现的方式仍为简略方式,复杂网络则pNodeArray需构建为完成的邻接表。实现代码省略。

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

// 创建网络

void Net::ReCreate(void)

{

     if(IsChanged())

     {       

          AbsRout *pRout=NULL;

          AbsLine *pLine=NULL;

          std::fstream file;

          std::fstream indexFile;

         char *fileName="routaddress.txt";

         char *indexFileName="IndexAddr.txt";

          unsigned int addr[IP_ADDRESS_LENGTH];

 

         //清空资源

          Clear();

         //获得网络结构信息

          GetNetInfor();

         pNodeArray = new NetNode[routNum];

 

          //打开存储“路由器地址表”文件

          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);
           }

          //打开存储“路由号与地址对应表”文件

          indexFile.open(indexFileName,std::ios_base::in|std::ios_base::out);

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

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

         {//网络的初始化

              indexFile<<i<<'/t';

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

              {

                   file>>addr[j];

                   indexFile<<addr[j]<<' ';

              }

              indexFile<<'/n';

              pRout = new CentralRout();

              pRout->SetSelfAddress(addr);

              (pNodeArray+i)->pRout = pRout;

              pLine = new Fiber();

              (pNodeArray+i)->pLine = pLine;

         }//end of for

 

          file.close();

          indexFile.close();

     }

     /*注释内容为网络邻接表的实现方式,邻接表可以表示任意复杂的网络。

       但这里从简省略,网络的信息仍依靠矩阵与向量保存。待系统需创建

       任意复杂的网络的时候,可对代码进行修改和扩充。

       (这一部分代码略 */

}

 

三,路由计算与路由表的建立

这一部分为比较核心的内容。路由计算的建立,与路由计算的实现是分离的。路由计算的实现我们再另外的文档中再单独展示。当把路由计算与其实现完成整合以后,就可以由路由器完成路由表的填写。

 

1设置路由计算方法

方法名称:              AbsRout::SetComputeMethods

方法参数:             void _routCompute(int **,int **,int **&,int,int)

返回值:              

方法的目的:           把路由计算的实现(参数_ routCompute)与路由器内路由计算的指针完成连接。

可能的出错:          

//设置路由计算方法

void AbsRout::SetComputeMethods(void _routCompute(int **,int **,int **&,int,int))

{

     RoutCompute = _routCompute;

}

2 路由计算的建立

方法名称:              Net::RoutComputeBuilder

方法参数:            

返回值:              

方法的目的:           路由计算的完整建立过程。包括实现路由计算的设置、洪泛方式送网络信息到路由器、调用路由表填写方法。

可能的出错:          

// 路由计算的建立

void Net::RoutComputeBuilder(void)

{

     if(pNodeArray!=NULL)

     {

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

         {

              (pNodeArray+i)->pRout->SetComputeMethods(ComputeMethods);

              (pNodeArray+i)->pRout->SetNetInfor(netArray,valArray,routNum);

         }//

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

              (pNodeArray+i)->pRout->SetRoutTable();

     }//

}

 

注释:函数ComputeMethods由dll文件实现,为路由算法的主题部分。

 

                                                           <未完>

 

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

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

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

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

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

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

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

  二,网络的建立网络的建立都是针对中心路由器的高速网络,任意复杂网络可以扩充实现。另外本方案部分代码是为单独调试、运行而写的,在与通信模拟系统整合时要重写部分代码。  1,获得网络信息方法名称:  ...
  • PercyLee
  • PercyLee
  • 2004年05月01日 21:23
  • 1072

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

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

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

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

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

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

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

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

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

本文介绍了常见的路由器实现方案。
  • cc214042
  • cc214042
  • 2016年09月21日 00:03
  • 2495

rip协议java模拟实现

大二下学期的计算机网络原理课程设计 已同步githuburl:https://github.com/leiflee/ripdemogit:https://github.com/leiflee/ripd...
  • leiflyy
  • leiflyy
  • 2016年07月09日 00:43
  • 3131
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:路由模拟——设计方案的实现(3)
举报原因:
原因补充:

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