计网:RIP路由协议(c语言)

计网:RIP路由协议(c语言),第1张

#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);
		}
	}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1295884.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存