计算机网络实验报告(路由算法、Socket编程)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机网络实验报告
班级:
姓名:
学号:
实验一
一.实验目的及要求
编写程序,模拟距离矢量路由算法的路由表交换过程,演示交换后的路由表的变化。
二.实验原理
距离矢量路由算法是这样工作的:每个路由器维护一张路由表(即一个矢量),它以网络中的每个路由器为索引,表中列出了当前已知的路由器到
每个目标路由器的最佳距离,以及所使用的线路。通过在邻居之间相互交换
信息,路由器不断地更新他们的内部路由表。
举例来说,假定使用延迟作为“距离”的度量标准,并且该路由器发送一个列表,其中包含了他到每一个目标路由器的延时估计值;同时,他也从
每个邻居路由器接收到一个类似的列表。假设一个路由器接收到来自邻居x
的一个列表,其中x(i)表示x估计的到达路由器i所需要的时间。如果该
路由器知道他到x的延时为m毫秒,那么他也知道在x(i)+m毫秒之间内经
过x可以到达路由器i。一个路由器针对每个邻居都执行这样的计算,就可
以发现最佳的估计值,然后在新的路由器表中使用这个最佳的估计值以及对
应的输出路线。
三.源程序:
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "graphics.h"
#include "dos.h"
#define VERNUM 7
typedef struct
{
int dis;
int flag;
int flag2;
}RoutNode;
char tmp[10];
RoutNode data[VERNUM][VERNUM];
void welcome();
void InitRoutData(FILE* pfile);
void PrintRoutData();
void SendInf(int recv, int send);
void Exchange();
int main()
{
int start, end, i, j, m, n;
FILE *pfile;
welcome();
pfile = fopen("1.txt", "r");
if (pfile == NULL)
{
printf("the file wrong,press any key to come back.\n");
getch();
return;
}
else
InitRoutData(pfile);
fclose(pfile);
printf("\nthe original route table:\n");
for (i = 0; i { printf("%c||", i + 65); for (j = 0; j < VERNUM; j++) if (data[i][j].dis > 0) printf("<%c %d> ", j + 65, data[i][j].dis); printf("\n"); } PrintRoutData(); getch(); for (i = 0; i < VERNUM; i++) { for (m = 0; m < VERNUM; m++) for (n = 0; n < VERNUM; n++) data[m][n].flag = 0; Exchange(); PrintRoutData(); getch(); } printf("\nexchange the route table:\n"); return 0; } void welcome() { int gdriver=DETECT,gmode; registerbgidriver(EGAVGA_driver); initgraph( &gdriver, &gmode,"C:\Win-TC"); cleardevice(); setbkcolor(CYAN); setviewport(0,0,639,479,1); clearviewport(); setbkcolor(BLUE); setcolor(14); rectangle(200,200,440,280); setfillstyle(1,5); floodfill(300,240,14); settextstyle(0,0,2); outtextxy(50,30,"Distance Vector Routing Algorithm"); setcolor(15); settextstyle(1,0,4); outtextxy(260,214,"Welcome to use!"); line(0,80,640,80); getch(); delay(300); cleardevice(); } void InitRoutData(FILE* pfile) { char num[10]; int i = 0; char c; int m, n; fseek(pfile, 0, 0); for (m = 0; !feof(pfile) && m < 7; m++) { for (n = 0; !feof(pfile) && n < 7; n++) { while (!feof(pfile)) { c = fgetc(pfile); if (c == ',') { num[i] = '\0'; data[m][n].dis = atoi(num); data[m][n].flag = 0; data[m][n].flag = 0; i = 0;