首页 > 开发 > 综合 > 正文

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

2024-07-21 02:16:28
字体:
来源:转载
供稿:网友
一, 全局名空间
路由模拟系统中所有全局变量与函数皆实现在一个名空间中。


名空间: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);

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表