用C语言实现距离向量算法的过程模拟
来源:互联网 发布:java字符串双引号替换 编辑:程序博客网 时间:2024/05/16 11:00
计算机网络的实验作业拖了好久了,内容是模拟RIP协议,一直想用纯面向过程的思路来写,其中原因并非不喜欢面向对象,而是博主的Java忘的差不多了。。。
今天下午吐血写完,功能实现的不是很好,没写多路由器自由交互,算了,半自由交互勉强可以用
代码如下:
#include <stdio.h>#include <string.h>//定义路由表结构RTabletypedef struct node{ char dstNet[5]; int distance; char nextSkip[5];}RTable;RTable RT1[1000];//当前路由器路由表RTable RT2[1000];//相邻路由器的路由表RTable RT3[1000];int i,l1,l2,l3;char nearR1[5],nearR2[5];//基于当前路由器的路由表初始化函数void InitRTable( RTable* RT ){ printf("请为当前路由器添加路由表项(目的网络 距离 下一跳路由器):\n"); for( i=0;i<1000;++i ){ scanf("%s%d%s",RT[i].dstNet,&RT[i].distance,RT[i].nextSkip); if( RT[i].distance==0 ){ break; } } l1 = i;//记录RT1[]的长度}//相邻路由器添加函数void AddNearRouter(){ printf("\n请输入第一个相邻路由器名称:\n"); scanf("%s",nearR1); printf("请输入第二个相邻路由器名称:\n"); scanf("%s",nearR2);}//基于相邻路由器的路由表初始化函数void InitNearRTable(){ printf("\n请为相邻路由器%s添加路由表项(目的网络 距离 下一跳路由器):\n",nearR1); for( i=0;i<1000;++i ){ scanf("%s%d%s",RT2[i].dstNet,&RT2[i].distance,RT2[i].nextSkip); if( RT2[i].distance==0 ){ break; } } l2 = i;//记录RT2[]的长度 printf("\n请为相邻路由器%s添加路由表项(目的网络 距离 下一跳路由器):\n",nearR2); for( i=0;i<1000;++i ){ scanf("%s%d%s",RT3[i].dstNet,&RT3[i].distance,RT3[i].nextSkip); if( RT3[i].distance==0 ){ break; } } l3 = i;//记录RT3[]的长度}//路由表更新函数void UpdateRTable( RTable* RT1,RTable* RT2,char* nearR ){ int p,q;//p——RT2[],q——RT1[] for( p=0;p<l2;++p ){ int finded=0; for( q=0;q<l1;++q ){ if( strcmp( RT2[p].dstNet,RT1[q].dstNet )==0 ){//当前表中找到与发来的表目的网络相同的一条路由信息 finded = 1; if( strcmp( RT1[q].nextSkip,nearR )==0 ){//下一跳路由器正好是这个相邻路由器 RT1[q].distance = RT2[p].distance + 1; } else{//下一跳路由器不是这个 if( RT2[p].distance+1<RT1[q].distance ){ RT1[q].distance = RT2[p].distance + 1; strcpy( RT1[q].nextSkip,nearR ); } } } } if( !finded ){//当前表中没有这条路由信息,就加上 strcpy( RT1[l1].dstNet,RT2[p].dstNet ); RT1[l1].distance = RT2[p].distance + 1; strcpy( RT1[l1].nextSkip,nearR ); ++l1; } }}void Print1(){ printf("\n----------当前路由器的路由表---------\n");}void Print2(){ printf("\n----------相邻路由器的路由表---------\n");}//路由表打印函数void PrintRTable( RTable* RT,int len ){ printf(" 目的网络 距离 下一跳路由器\n"); for( i=0;i<len;++i ){ printf(" %s %d %s\n",RT[i].dstNet,RT[i].distance,RT[i].nextSkip); } printf("-------------------------------------\n");}//路由表更新函数void Choose_Update(){ printf("\n请选择一个传递更新信息的相邻路由器(1 or 2):\n"); int choose; scanf("%d",&choose); if( choose==1 ){ UpdateRTable(RT1,RT2,nearR1); } else if( choose==2 ){ UpdateRTable(RT1,RT3,nearR2); } printf("\n-------当前路由器更新后的路由表------\n"); PrintRTable(RT1,l1);}int main(){ printf("\n-----------距离向量算法的过程模拟------------\n\n"); //初始化当前路由器 InitRTable(RT1); //添加相邻路由器 AddNearRouter(); //初始化相邻路由器 InitNearRTable(); //打印当前路由表 Print1(); PrintRTable(RT1,l1); //打印相邻路由表 Print2(); PrintRTable(RT2,l2); Print2(); PrintRTable(RT3,l3); //进行路由表更新 Choose_Update();}
0 0
- 用C语言实现距离向量算法的过程模拟
- 距离向量路由算法的Java模拟
- 时间片轮转调度算法的C语言模拟实现
- 用经纬度计算两地之间的距离, C 语言实现。
- 模拟简单距离向量算法的更新——计算机网络作业
- 距离向量(DV)算法的问题
- RIP协议的距离向量算法--C++
- 距离向量算法描述
- RIP距离向量算法
- RIP距离向量算法
- 距离向量算法
- ns2网络模拟实验,基于NS2的距离向量算法仿真及结果分析 请大侠帮忙啊~~~
- 用C语言实现的A*算法
- java实现基于距离向量算法 路由协议
- 用C语言模拟实现通讯录的文件版本
- String函数的模拟实现(c语言)
- 数据结构和算法分析c++:向量的实现
- 多级反馈队列调度算法 C语言模拟实现
- 数据结构的堆栈和内存中的堆栈
- 为什么IT人士的健康比较成问题
- 互联网公司面试经验
- 使用Gradle构建Android工程
- 基于behaviac定制行为树编辑器的尝试
- 用C语言实现距离向量算法的过程模拟
- iOS 库集
- java面向对象(图书管理系统03)
- linux-windows 通过SecureCRT进行远程访问和文件(包含文件夹)传输
- 在路上(1)
- mysql中日期比较-------unix_timestamp,from_unixtime
- 简述linux自旋锁
- Spring Boot初探
- 11.12acm培训题 Problem B: 字符串的解密