您的位置:首页 > 其它

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

2008-04-27 18:47 609 查看
路由模拟系统设计方案(二) 实现部分2004-4-10 说明:本实现部分只介绍主要类的主要接口的实现。 一,网络数据包的产生网络数据包可以由路由器产生,这里由Net类产生,并传给相应路由器作为起点。因本系统的初衷,所以所有过程的界面都是控制台。如果以后的实现为窗体界面,可以重载或重写这一部分代码。 1,产生网络传输的数据包方法名称: Net::MakeData方法参数: 无返回值: int类型,为数据包起点路由器号。方法的目的: 由控制台输入正确的起始路由器号与目标路由器号,产生正确的数据包。其中路由器号和路由器地址是一一对映的。可能的出错: 网络未建: 报错且系统退出。 控制台路由器号输入有误:报错且重新输入。// 产生网络传输的数据包int Net::MakeData(void){ if(routNum==0 || pNodeArray==NULL) { std::cout<<"网络为空网络,目前无法生成数据包..."; exit(-1); }// int i=0,j=0; std::cout<<"网络中路由器的标号与地址为:" <<"标号: 地址"<<std::endl; for(int k=0;k<routNum;k++) {// 打印路由器号与地址对应表 std::cout<<k<<": "; for(int m=0;m<IP_ADDRESS_LENGTH;m++) std::cout<<*((pNodeArray+k)->pRout->GetSelfAddress()+m); std::cout<<std::endl; }Loop: std::cout<<"请输入数据包的源路由器的标号:"; std::cin>>i; std::cout<<"请输入数据包的目标路由器的标号:"; std::cin>>j; if((i< 0)||(i>routNum-1)||(j<0)||(j>routNum-1)) { std::cout<<"输入的源路由器的标号或目标路由器的标号有错误,请核对..."; 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<<"产生的数据包:"; 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<<"At Rout: "; for(int i=0;i<IP_ADDRESS_LENGTH;i++) std::cout<<selfAddress[i]; std::cout<<std::endl; //----------------------------------------------- if(AddrEqual(currIPData.GetAddressTo(),selfAddress))
return; DataRoutCompute();} <未完>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: