目录
前言
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,然后就把>>之间的空格省略了,导致出问题了
实验十 路由器查表过程模拟
参考教材 140 页 4.3 节内容,编程模拟路由器查找路由表的过程,用(目的地址 掩码 下一跳) 的 IP 路由表以及目的地址作为输入,为目的地址查找路由表,找出正确的下一跳并输出结果。
(1)构建路由表:在程序中,通过不断输入目的地址、子网掩码和下一跳路由,构建了路由表,以输入字符‘q’结束路由表构造。
(2)输入目的地址:随后用户可以输入目的地址,程序将模拟查询过程,并输出下一跳路由,以输入字符‘q’结束查表。
while(1) {
cin>>routerTemp.first.first;
if(routerTemp.first.first[0]=='q') {
break;
}
cin>>routerTemp.first.second;
cin>>routerTemp.second;
routerTable.push_back(routerTemp);
}
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
(1)利用输入的目的地址、子网掩码和下一跳路由构建出路由表。
图1.1 启动MyWebServer
(2)输入一系列ip地址进行路由器查表,在控制台可以看到,若目标地址匹配,则输出相应的下一跳,否则输出下一跳为“默认路由R0”。
图1.2 输入ip地址进行查表
//#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<