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

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

实现部分

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

}

<未完>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航