二,网络的建立
网络的建立都是针对中心路由器的高速网络,任意复杂网络可以扩充实现。另外本方案部分代码是为单独调试、运行而写的,在与通信模拟系统整合时要重写部分代码。
1,获得网络信息
方法名称: Net::GetNetInfor
方法参数: 无
返回值: 无
方法的目的: 获得网络的信息,包括网络的拓扑信息,耗散信息,以及有可能包括的路由器类型向量与网络线路类型向量。本实现方案为简单情形,从文件中读取这些信息。如果与通信模拟系统进行整合,则调用通信模拟系统提供的接口来获得这些信息,可重写代码。
可能的出错: 文件操作失败:系统退出。
// 获得网络信息
void Net::GetNetInfor(void)
{
int _routNum=-1;
int _lineNum=-1;
std::fstream file;
char *fileName="netinfor.txt";
file.open(fileName,std::ios_base::in|std::ios_base::out);
if(file.fail())
{
std::cout<<"\n\n文件("<<fileName<<") 打开失败.\n\n";
char ch;
std::cin>>ch;
exit(-1);
}
//这里是从文件中获得网络信息的,可以从通信模拟系统中直接获得,
//可另外实现。目前代码只考虑主干网的信息。复杂网络可以扩充实现。
////////////////////////////////////////////////////////////////
file>>_routNum;
file>>_lineNum;
routNum=_routNum;
lineNum=_lineNum;
// 申请内存资源
netArray = new int *[routNum];
for(int i=0;i<routNum;i++)
netArray[i] = new int[routNum];
valArray = new int *[routNum];
for(int i=0;i<routNum;i++)
valArray[i] = new int[routNum];
routTypes = new NetElementType[routNum];
lineTypes = new NetElementType[lineNum];
//读文件获得网络信息:仅包括拓扑信息与耗散信息
for(int i=0;i<routNum;i++)
for(int j=0;j<routNum;j++)
file>>netArray[i][j];
for(int i=0;i<routNum;i++)
for(int j=0;j<routNum;j++)
file>>valArray[i][j];
file.close();
}
2,判断网络是否发生改变
方法名称: Net::IsChanged
方法参数: 无
返回值: bool类型,为true则网络信息发生改变,否则未改变。
方法的目的: 判断网络信息是否发生改变,以决定是否需重新建立网络。网络初建时认为网络信息已发生改变。本方案的实现仍为简洁方式,复杂网络或与通信模拟系统整合时仍需要重写部分代码。
可能的出错: 文件操作失败:系统退出。
// 判断网络是否发生改变
bool Net::IsChanged(void)
{
if(first){//网络初建
first=false;
return true;
}
/*注释的代码是从通信系统直接获得网络信息的判断方式
if(routNum!=...|| lineNum!=...)
return true;
for(int i=0;i<routNum;i++)
for(int j=0;j<routNum;j++)
if(netArray[i][j]!=... || valArray[i][j]!=...)
return true;
*/
int _routNum=-1;
int _lineNum=-1;
std::fstream file;
char *fileName="netinfor.txt";
file.open(fileName,std::ios_base::in|std::ios_base::out);
if(file.fail())
{
std::cout<<"\n\n文件("<<fileName<<") 打开失败.\n\n";
char ch;
std::cin>>ch;
exit(-1);
}
file>>_routNum;
file>>_lineNum;
if(routNum!=_routNum || lineNum!=_lineNum )
{//判断路由器数量与线路数量
file.close();
return true;
}
//判断网络信息中相临矩阵与耗散矩阵是否发生改变
int value;
for(int i=0;i<routNum;i++)
for(int j=0;j<routNum;j++)
{
file>>value;
if(netArray[i][j]!=value)
{
file.close();
return true;
}
}
for(int i=0;i<routNum;i++)
for(int j=0;j<routNum;j++)
{
file>>value;
if(valArray[i][j]!=value)
{
file.close();
return true;
}
}
//网络信息没有发生改变
file.close();
return false;
}
<未完>
本文地址:http://com.8s8s.com/it/it966.htm