分享
 
 
 

路由模拟——类设计的声明部分

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

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

接口说明部分

2004-3-21

一, 全局名空间

路由模拟系统中所有全局变量与函数皆实现在一个名空间中。

名空间:NetSource

名空间内变量:

#define NULL 0

//网络设备类型表

enum NetElementType{FIBER=1,CENTRALROUT};

//路由IP地址长度

const int IP_ADDRESS_LENGTH=32;

//路由表最大长度

const int MAX_ROUT_TABLE_SIZE=100;

//路由器端口最大数据包容量

const int MAX_DATA_QUEUE_LENGTH=20;

名空间内函数:

//判断两个IP地址是否相等

bool AddrEqual(const unsigned int * addr1,const unsigned int * addr2);

二,类设计

路由模拟系统的类根据前文档类图设计。所有类的构造函数与析构函数接口说明略。

1, 网络元素

类名: NetElement

类的性质: 纯虚基类

父类: 无

类的主要属性:

// 网络设备的类型

< protected > NetElementType netElementType;

类的主要接口:

// 获得网络设备的类型

< public > virtual NetElementType GetType(void) = 0;

2, 网络线路

类名: AbsLine

类的性质: 纯虚基类

父类: 公有继承NetElement

类的主要属性:

继承属性略;

// 网络线路的长度

< protected > int length;

类的主要接口:

< public > virtual void SetLength(int _length) = 0;

< public > virtual int GetLength(void) = 0;

3, 光纤

类名: Fiber

类的性质: 可实例化子类

父类: 公有继承AbsLine

类的主要属性:

继承属性略;

类的主要接口:

// 获得网络设备的类型

< public > NetElementType GetType(void);

// 设置线路物理长度

< public > virtual void SetLength(int _length);

// 获得线路物理长度

< public > virtual int GetLength(void);

4, 路由器

类名: AbsRout

类的性质: 纯虚基类

父类: 公有继承NetElement

类的主要属性:

继承属性略;

// 路由器自身地址

< protected > int selfAddress[IP_ADDRESS_LENGTH];

// 路由表

< protected > Table routTable;

//当前IP数据包

< protected > NetData currTPData;

//数据端口

< protected > std::list <NetData> dataInList;

< protected > std::list <NetData> dataOutList;

< protected > std::list <NetData>::iterator dataIter;

//当前数据端口数据量

< protected > int dataListLength;

类的主要接口:

// 路由器发送数据至端口

< protected > virtual void SendData(void) = 0;

// 路由器从端口接收数据

< protected > virtual void ReceiveData(void) = 0;

// 网络向路由器端口写数据

< public > virtual bool NetWriteData(NetData & _netData) = 0;

// 网络从路由器端口接收数据

< public > virtual NetData * NetReadData() = 0;

// 设置路由表

< public > virtual void SetRoutTable(void);

//路由计算:函数指针

< protected > void (*RoutCompute)(int **_netArray,int **_valArray,

int **&result,int routNum,int index);

// 对当前数据包进行路由计算

< protected > void DataRoutCompute(void);

//设置路由计算方法

< public > void SetComputeMethods(void _routCompute(int **,int **,

int **&,int,int));

// 设置自身地址

< public > virtual void SetSelfAddress(

unsigned int addr[IP_ADDRESS_LENGTH]);

// 获得自身地址

< public > virtual unsigned int * GetSelfAddress(void);

// 空

< public > virtual void SetNetInfor(int ** _netArray, int ** valArray,

int _routNum);

// 产生数据

< public > void MakeData(NetData & netData);

5, 中心路由器

类名: CentralRout

类的性质: 可实例化子类

父类: 公有继承AbsRout

类的主要属性:

继承属性略;

//网络信息

< private > int **netArray,**valArray;

//发送数据包跟踪器

< private > double id;

类的主要接口:

// 获得设备类型

< public > virtual NetElementType GetType(void);

//网络向端口发送数据

< public > virtual bool NetWriteData(NetData & _netData);

// 网络从路由器端口接收数据

< public > virtual NetData * NetReadData();

// 设置路由表

< public > virtual void SetRoutTable(void);

//洪泛过程获得网络信息

< public > virtual void SetNetInfor(int ** _netArray, int ** _valArray,int _routNum);

// 路由器向端口发送数据

< protected > virtual void SendData(void);

// 路由器从端口接收数据

< protected > virtual void ReceiveData(void);

6, 网络结点

类名: NetNode

类的性质: 可实例化类

父类: 无

类的主要属性:

// 路由器

< public > AbsRout *pRout;

// 网络线路

< public > AbsLine *pLine;

< public > NetNode *pNextNode;

类的主要接口:

7, 网络

类名: Net

类的性质: 可实例化类

父类: 无

类的主要属性:

// 网络中路由器个数

< private > int routNum;

//网络中网络线路个数

< private > int lineNum;

// 网络的数据结构:邻接表

< private > NetNode *pNodeArray;

//网络的相邻矩阵和耗散矩阵

< private > int ** netArray;

< private > int ** valArray;

//路由器的类型向量

< private > NetElementType * routTypes;

//网络线路的类型向量

< private > NetElementType * lineTypes;

//网络初建

< private > static bool first;

类的主要接口:

// 创建空网络

< public > void Create(int _routNum);

// 创建主干网络

< public > void Create(int ** _netArray, int ** _valArray, int _routNum);

// 创建任意类型网络

< public > void Create(int ** _netArray, int ** _valArray, int _routNum,int _lineNum, NetElementType * R, NetElementType * L);

// 获得网络信息

< private > void GetNetInfor(void);

// 判断网络是否发生改变

< private > bool IsChanged(void);

// 释放资源

< private > void Clear(void);

// 创建网络

< public > void ReCreate(void);

// 据地址获得路由器序列的下标

< public > int GetRoutID(unsigned int addr[IP_ADDRESS_LENGTH]);

//获得pNodeArray

< public > NetNode *& GetpNodeArray();

// 产生网络传输的数据包

< public > int MakeData(void);

// 产生网络传输的数据包

< public > int MakeData(NetData &_ipData);

// 路由计算的建立

< public > void RoutComputeBuilder(void);

8, 路由表结点

类名: TableNode

类的性质: 可实例化类

父类: 无

类的主要属性:

// 目标地址

< public > unsigned int addressTo[IP_ADDRESS_LENGTH];

// 下一个中继路由地址

< public > unsigned int addressNextHop[IP_ADDRESS_LENGTH];

类的主要接口:

// 设置目标地址

< public > void SetAddressTo(unsigned int _addressTo[IP_ADDRESS_LENGTH]);

// 设置下一个中继路由地址

< public > void SetAddressNextHop(unsigned int

_addressNextHop[IP_ADDRESS_LENGTH]);

9, 路由表

类名: Table

类的性质: 可实例化类

父类: 无

类的主要属性:

// 路由器数量

< private > int routNum;

// 路由表

< private > TableNode table[MAX_ROUT_TABLE_SIZE];

类的主要接口:

// 设置路由器数量

< public > void SetRoutNum(int _routNum);

// 设置路由表

< public > void SetTable(TableNode _table[MAX_ROUT_TABLE_SIZE]);

// 获得下一个中继路由地址

< public > int * GetAddrNextHop(int addrTo[IP_ADDRESS_LENGTH]);

// 获得路由器数目

< public > int GetRoutNum(void);

10, 网络数据包

类名: NetData

类的性质: 可实例化类

父类: 无

类的主要属性:

// 网络数据包之源地址

< private > unsigned int addressFrom[IP_ADDRESS_LENGTH];

// 网络数据包之目标地址

< private > unsigned int addressTo[IP_ADDRESS_LENGTH];

// 网络数据包之前中继地址

< private > unsigned int preHop[IP_ADDRESS_LENGTH];

// 网络数据包之后中继地址

< private > unsigned int nextHop[IP_ADDRESS_LENGTH];

// 是否是消息

< private > bool bMessage;

// 数据包跟踪计数器:消息与IP数据包一一对映

< public > double ID;

// 网络数据包之数据信息

< private > int ipData[IP_ADDRESS_LENGTH];

类的主要接口:

// 判断是否为应答消息

< public > bool IsMessage(void);

//判断网络数据包是否相同

< public > bool operator ==(NetData &netData);

// 设置网络数据包源地址

< public > void SetAddressFrom(unsigned int addrFrom[IP_ADDRESS_LENGTH]);

// 设置网络数据包目标地址

< public > void SetAddressTo(unsigned int addrTo[IP_ADDRESS_LENGTH]);

// 获得网络数据包源地址

< public > unsigned int * GetAddressFrom(void);

// 获得网络数据包目标地址

< public > unsigned int * GetAddressTo(void);

// 设置网络数据包之前中继地址

< public > void SetPreHop(const unsigned int _preHop[IP_ADDRESS_LENGTH]);

// 设置网络数据包之后中继地址

< public > void SetNextHop(const unsigned int _nextHop[IP_ADDRESS_LENGTH]);

// 获得网络数据包之前中继地址

< public > unsigned int * GetPreHop(void);

// 获得网络数据包之后中继地址

< public > unsigned int * GetNextHop(void);

// 设置IP数据包之数据内容

< public > void SetIPData(const int _ipData[IP_ADDRESS_LENGTH]);

// 获得IP数据包之数据内容

< public > int * GetIPData(void);

11, 通信

类名: Communication

类的性质: 可实例化类

父类: 无

类的主要属性:

// 网络模拟

< private > Net &net;

//网络数据结构的引用

< private > NetNode *& pNodeArray;

类的主要接口:

// 单数据包路由

< public > void SingleDataRout(void);

<2004-4-10 修改>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有