#include
#include
#include
typedef struct RoutTable{//定义路由表
unsigned char tn; //目的网络地址
unsigned char d; // 距离
char next; //下一跳路由
}RTable;
void insertTable(RTable rt[], int *count, unsigned char tn,
unsigned char d, char next);
void init(RTable rt[],int *count);
void prt(RTable rt[], int count);
void updateRIP(RTable rt[],int *count,RTable rtu[], int *count2);
void receiveRIP(RTable rt[], int *count);
int main(){
RTable rt[100], rtu[100];
//rt表示我们需要维护的本地路由器,路由表最多有100条表项目
//rtu表示接收到的相邻路由器的路由表
int count = 0, count2 = 0; //分别表示rt和rtu两个路由器实际的路由数
init(rt,&count); //对路由器rt进行初始化,count采用地址传递方式
prt(rt,count); //打印路由器表rt
while(1){
Sleep(3000); //每间隔3000ms就更新一次路由器(模式周期更新,实际的算法要求30ms更新一次)
receiveRIP(rtu,&count2); //收到来自相邻路由器的路由表
printf("接收到的路由信息:\n");
prt(rtu,count2);
updateRIP(rt,&count,rtu,&count2);
printf("更新后的路由信息:\n");
prt(rt,count);
}
return 0;
}
void init(RTable rt[], int *count){
insertTable(rt,count,1,1,'-'); //向rt插入一个目的网络为1,距离为1,下一跳本地交付的路由表项目
insertTable(rt,count,4,1,'-');
}
void insertTable(RTable rt[], int *count, unsigned char tn,
unsigned char d, char next){
rt[*count].tn = tn;
rt[*count].d = d;
rt[*count].next = next;
(*count)++; //路由表个数加一
}
void prt(RTable rt[], int count){
unsigned char i;
printf("目的网络 距离 下一跳 \n");
for(i=0;i rtu[i].d){
//如果下一跳地址不同,则比较两个表项哪个距离更小
rt[j].next = rtu[i].next;
rt[j].d = rtu[i].d;
}
break;
}
}
if (j >= *count){ //如果发来的路由表中有表项在原来rt表中没有,则直接插入到rt表中
insertTable(rt,count,rtu[i].tn,rtu[i].d,rtu[i].next);
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)