栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917343.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号