计算机网络课程设计-路由器查表过程模拟

目录

前言

1 实验题目

2 实验目的

3 实验内容

3.1 步骤

3.2 关键代码

3.2.1 利用while循环构建路由表

3.2.2 利用Stringsplit函数对输入的IP地址与路由表中的目的地址进行匹配

4 实验结果与分析

5 代码


前言

        本实验为计算机网络课程设计内容,基本上所有代码都是根据指导书给的附录写出来的。有些实验需要实现图形界面,但是出于期末考试压力,我所有实验均是在控制台输入输出的,没有花额外时间去学习qt了,有精力的同学可以自学一下qt实现简单的图形界面。同时,该博客内容为部分报告内容,仅为大家提供参考,请勿直接抄袭。另外,本次实验所用平台是dev c++5.11

        该实验比较简单,就是一个模拟过程,实验中会用到pair,这是个结构体,不懂的可以自行搜索一下用法,同时注意< <和> >之间最好加空格,我当时就是因为少了空格一直有问题,但是找不到,后面是看到自己是自定要的pair,然后就把>>之间的空格省略了,导致出问题了

1 实验题目

        实验十 路由器查表过程模拟

2 实验目的

        参考教材 140 页 4.3 节内容,编程模拟路由器查找路由表的过程,用(目的地址 掩码 下一跳) 的 IP 路由表以及目的地址作为输入,为目的地址查找路由表,找出正确的下一跳并输出结果。

3 实验内容

3.1 步骤

        (1)构建路由表:在程序中,通过不断输入目的地址、子网掩码和下一跳路由,构建了路由表,以输入字符‘q’结束路由表构造。

        (2)输入目的地址:随后用户可以输入目的地址,程序将模拟查询过程,并输出下一跳路由,以输入字符‘q’结束查表。

3.2 关键代码

3.2.1 利用while循环构建路由表

while(1) {
		cin>>routerTemp.first.first;
		if(routerTemp.first.first[0]=='q') {
			break;
		}
		cin>>routerTemp.first.second;
		cin>>routerTemp.second;
		routerTable.push_back(routerTemp);
	}

3.2.2 利用Stringsplit函数对输入的IP地址与路由表中的目的地址进行匹配

void Stringsplit(string str, vector routerTable,const char split1) {
	int ip1[4];
	int ip2[4];
	int ip3[4];
	int cnt1,cnt2;
	string token;
	int i;
	for(i=1; i

4 实验结果与分析

(1)利用输入的目的地址、子网掩码和下一跳路由构建出路由表。

计算机网络课程设计-路由器查表过程模拟_第1张图片

图1.1 启动MyWebServer

(2)输入一系列ip地址进行路由器查表,在控制台可以看到,若目标地址匹配,则输出相应的下一跳,否则输出下一跳为“默认路由R0”。

计算机网络课程设计-路由器查表过程模拟_第2张图片

图1.2 输入ip地址进行查表

5 代码

//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

typedef long long LL;
typedef pair  pair_ss;
typedef pair  pair_sss;

const int maxn = 10010;

void Stringsplit(string str, vector routerTable,const char split1) {
	/*
	128.1.2.192 255.255.255.192 接口0,/26
	10000000 00000001 00000010 11000000
	11111111 11111111 11111111 11000000
	===
	10000000 00000001 00000010 11000000
	128.1.2.192

	128.1.2.128 255.255.255.192 接口0,/26
	10000000 00000001 00000010 10000000
	11111111 11111111 11111111 11000000
	===
	10000000 00000001 00000010 10000000
	128.1.2.128

	128.1.2.132
	10000000 00000001 00000010 10000100
	11111111 11111111 11111111 11000000
	==
	10000000 00000001 00000010 10000000
	128.1.2.128

	128.1.3.132
	10000000 00000001 00000011 10000100
	11111111 11111111 11111111 11000000
	==
	10000000 00000001 00000011 10000000
	128.1.3.128
	*/
	int ip1[4];
	int ip2[4];
	int ip3[4];
	int cnt1,cnt2;
	string token;
	int i;
	for(i=1; i routerTable;
	pair_sss routerTemp;
	int flag=1;
	routerTable.push_back(pair_sss({"128.1.2.1","0.0.0.0"},"默认路由R0"));
	cout<<"请构造路由表,(目的地址,子网掩码,下一跳路由),如:“128.1.2.192 255.255.255.192 接口0”,输入‘q’结束\n";

	while(1) {
		cin>>routerTemp.first.first;
		if(routerTemp.first.first[0]=='q') {
			break;
		}
		cin>>routerTemp.first.second;
		cin>>routerTemp.second;
		routerTable.push_back(routerTemp);
//		cin>>routerTemp.first.first>>routerTemp.first.second>>routerTemp.second;
	}
	cout<<"路由表如下:\n";
	cout<<"目的地址\t子网掩码\t\t下一跳路由\n"; 
	for(int i=0;i>str1.first.first>>str1.first.second>>str1.second;
//	string str1,str2,str3;

	string str2;
	while(1) {
		cout<<"请构输入目的地址,如:“128.1.2.132”,输入‘q’结束\n";
		cin>>str2;
		if(str2[0]=='q')break;
		Stringsplit(str2,routerTable,'.');
	}
//	routerTable.push_back(pair_sss({"128.1.2.1","0.0.0.0"},"默认路由R0"));
//	routerTable.push_back(str1);
//	routerTable.push_back(pair_sss({"128.1.2.192","255.255.255.192"},"接口0"));
//	routerTable.push_back(pair_sss({"128.1.2.128","255.255.255.192"},"接口1"));
//
//	string str="128.1.3.132";
	cin>>str;
//	Stringsplit(str,routerTable,'.');
//	for(int i=0; i<13; i++) {
//		if(v[0][i]&v[1][i])cnt++;
//	}
//	cout<

你可能感兴趣的:(计算机网络,计算机网络)