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

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

 

 

五,路由过程

         本实现部分为整个系统执行时序的表现,如果与通信模拟系统整合,本部分是不需要的。所以这部分是为单独调试而写的。为了检验路由模拟系统,写了一个单数据包路由的过程。但语义基本上是完整的。如果在通信模拟系统里实现这一部分,可以同步详尽的扩充设计。

 

1,单数据包路由

方法名称:              Communication::SingleDataRout

方法参数:             无

返回值:               无

方法的目的:           实现单个数据包由创建到路由成功的全过程,期间可能会有若干次的网络重建。

可能的出错:           无

// 单数据包路由

void Communication::SingleDataRout(void)

{

     //局部变量

     int index=0,number=0;

     char ch;

     bool bWriteSucc=true;

     NetData *pNetData=NULL;

Loop:

     //发送若干数据包后,自动检测网络是否已经发生改变;如果已经改变,

     //则重新获得网络信息并创建之。

     if(number==0)

          net.ReCreate();

     net.RoutComputeBuilder();

     //index记录数据包的源路由器标号

     index=net.MakeData();

    

     pNetData=(pNodeArray+index)->pRout->NetReadData();

 

     while(pNetData!=NULL)

     {//该数据包进行路由过程

          if(pNetData->IsMessage())

         {//应答消息

              index = net.GetRoutID(pNetData->GetNextHop());

              bWriteSucc=(pNodeArray+index)->pRout->NetWriteData(*pNetData);

              //涌塞则等待;完善的涌塞处理方案另外实现。

              if(!bWriteSucc)

                   continue;

              index = net.GetRoutID(pNetData->GetPreHop());

         }else if(!pNetData->IsMessage())

         {//网络数据包

              index = net.GetRoutID(pNetData->GetNextHop());

              bWriteSucc=(pNodeArray+index)->pRout->NetWriteData(*pNetData);

              //涌塞则等待;完善的涌塞处理方案另外实现。

              if(!bWriteSucc)

                   continue;

         }//end of else if

          pNetData=(pNodeArray+index)->pRout->NetReadData();

     }//end of while

 

     number = (number+1)%6;

 

     std::cout<<"\n\nInput 'e' to exit,or press any char key to continue:";

     std::cin>>ch;

     std::cout<<std::endl;

     if(ch!='e')

         goto Loop;

    

}

 

 

                                                                                                             <2004-4-11 完成>

 

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