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

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

 

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

                                                               实现部分

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

}

 

                                                      <未完>

 

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