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

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

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

                                         路由模拟系统 设计方案(二)

                                                               实现部分

2004-4-10

 

说明:本实现部分只介绍主要类的主要接口的实现。

 

一,网络数据包的产生

网络数据包可以由路由器产生,这里由Net类产生,并传给相应路由器作为起点。因本系统的初衷,所以所有过程的界面都是控制台。如果以后的实现为窗体界面,可以重载或重写这一部分代码。

 

1产生网络传输的数据包

方法名称:              Net::MakeData

方法参数:            

返回值:               int类型,为数据包起点路由器号。

方法的目的:                由控制台输入正确的起始路由器号与目标路由器号,产生正确的数据包。其中路由器号和路由器地址是一一对映的。

可能的出错:           网络未建:          报错且系统退出。

                       控制台路由器号输入有误:报错且重新输入。

// 产生网络传输的数据包

int Net::MakeData(void)

{

     if(routNum==0 || pNodeArray==NULL)

     {

          std::cout<<"/n网络为空网络,目前无法生成数据包.../n/n";

          exit(-1);

     }//

     int i=0,j=0;

     std::cout<<"/n网络中路由器的标号与地址为:/n"

         <<"标号:/t地址"<<std::endl;

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

     {// 打印路由器号与地址对应表

          std::cout<<k<<":/t";

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

              std::cout<<*((pNodeArray+k)->pRout->GetSelfAddress()+m);

          std::cout<<std::endl;

     }

Loop:

     std::cout<<"/n请输入数据包的源路由器的标号:";

     std::cin>>i;

     std::cout<<"/n请输入数据包的目标路由器的标号:";

     std::cin>>j;

 

     if((i< 0)||(i>routNum-1)||(j<0)||(j>routNum-1))

     {

          std::cout<<"输入的源路由器的标号或目标路由器的标号有错误,请核对.../n/n";

         goto Loop;

     }

     // 产生网络传输的数据包:IPData数据包

     NetData ipData(false);

     ipData.SetAddressFrom((pNodeArray+i)->pRout->GetSelfAddress());

     ipData.SetAddressTo((pNodeArray+j)->pRout->GetSelfAddress());

     ipData.SetNextHop((pNodeArray+i)->pRout->GetSelfAddress());

     ipData.SetPreHop((pNodeArray+i)->pRout->GetSelfAddress());

     // 送给起点路由器

     (pNodeArray+i)->pRout->MakeData(ipData);

 

     return i;

}

2 路由器产生数据

方法名称:              AbsRout::MakeData

方法参数:              NetData & netData

返回值:              

方法的目的:                把参数netData拷贝到路由器当前数据包,调用路由计算。

可能的出错:          

// 产生数据

void AbsRout::MakeData(NetData & netData)

{

     currIPData.SetAddressFrom(netData.GetAddressFrom());

     currIPData.SetAddressTo(netData.GetAddressTo());

     currIPData.SetIPData(netData.GetIPData());

     currIPData.SetNextHop(netData.GetNextHop());

     currIPData.SetPreHop(netData.GetPreHop());

     currIPData.ID = netData.ID;

     //---------------------------------------------

     std::cout<<"/n产生的数据包:/n";

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

          std::cout<<*(netData.GetAddressFrom()+i);

     std::cout<<" -> ";

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

          std::cout<<*(netData.GetAddressTo()+i);

 

     std::cout<<"/n/nAt Rout:/t";

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

          std::cout<<selfAddress[i];

     std::cout<<std::endl;

     //-----------------------------------------------

     

     if(AddrEqual(currIPData.GetAddressTo(),selfAddress))
          return;

     DataRoutCompute();

}

 

                                                      <未完>

 

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

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

路由模拟——设计方案的实现(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

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

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

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

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

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

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

路由模拟——路由算法1的实现(路由基因类)

 //文件routgene.h#pragma once#include "nodeset.h" class RoutGene{public:     RoutGene(int _nodeNum=0);...
  • PercyLee
  • PercyLee
  • 2004年05月07日 13:22
  • 1355

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

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

rip协议java模拟实现

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

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