路由模擬——類設計的聲明部分
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);