欢迎光临
我们一直在努力

路由模拟——类设计的声明部分-.NET教程,Asp.Net开发

建站超值云服务器,限时71元/月

一, 全局名空间

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

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

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 路由模拟——类设计的声明部分-.NET教程,Asp.Net开发
分享到: 更多 (0)