for (j=0; j < N; j++) printf(\ printf(\ }
printf(\}
void print(int k) //打印函数 { int i, j;
printf(\次交换: \ for (i = 0; i < N; i++)
printf(\\dist[k][i], (char)(path[i]+65)); //显示到其他结点的距离并且输出邻居结点 printf(\}
void exchange(int v) {
int i, k, m;
for (i = 0; i < N; i++) //显示第一次交换结果 {
dist[1][i] = map[v][i]; if (i != v && dist[1][i] < MAX) path[i] = i; else
path[i] = -20;
}
print(1);
for (k = 2; k < N; k++) {
for (m = 0; m < N; m++) dist[k][m] = dist[k-1][m]; for (m = 0; m < N; m++) if (m != v)
for (i = 0; i < N; i++) //修改更新路由表
if (map[i][m] < MAX && dist[k-1][m] > dist[k-1][i] + map[i][m]) {
if (dist[k-1][i] + map[i][m] < dist[k][m]) {
dist[k][m] = dist[k-1][i] + map[i][m]; if (map[v][i] < MAX) path[m] = i; else
path[m] = path[i]; } } for (m = 0; m < N; m++) if (path[m] == v) path[m] = m; print(k); } } int main() { int i; init();
for (i = 0; i < N; i++) {
char c;
c=(char)(i+65);
printf(\路由器的路由表\\n\ exchange(i);
printf(\ }
getchar(); }
六、实验总结
程序先定义了一个路由表,路由表结点的权值和弧数可随机生成。路由表的初始信息存储在文件中,程序运行是先调用函数从文件中读取路由表的初始信息,然后输出初始路由表的信息,print()函数主要是向邻近节点发送自己的路由表信息,exchange()函数则根据新路由表信息更新自己的路由表。当所有的路由表节点都更新一遍后,整个路由表更新完毕。
七、实验心得
经过此次试验,对两种不的路由协议有了深入的理解。距离矢量路由算法及链路状态路由算法两者的区别在于,距离矢量路由算法是静态的,链路状态路由算法是动态的。我选择的是距离矢量路由算法,该算法的基本思想如下:每个路由器维护一个距离矢量(通常是以延时是作变量的)表,然后通过相邻路由器之间的距离矢量通告进行距离矢量表的更新。每一次都要相应地更改路由器的路由表,从而找到到达周边节点的最短路径。
实验二、Socket通信实验
一、实验内容
1.网络编程是通过使用套接字来达到进程间通信目的的编程,Socket编程是网络编程的主流工具,Socket API是实现进程间通信的一种编程设施,也是一种为进程间提供底层抽象的机制,提供了访问下层通信协议的大量系统调用和相应的数据结构。本实验利用Socket API编写网络通信程序,具体实验要求及内容如下。
2.所编写的程序应具有如下功能:
具有点对点通信功能,任意客户端之间能够发送消息; 具有群组通信功能,客户端能够向组内成员同时发送消息,其他组成员不能收到;
具有广播功能,客户端能够向所有其他成员广播消息;
二、实验目的及要求
实验目的:
1.掌握VB、VC++、VS或JAVA等集成开发环境编写网络程序方法; 2.掌握客户/服务器(C/S)应用的工作方式; 3.学习网络中进程之间通信的原理和实现方法; 4.理解单播、组播和广播的原理并比较其不同之处; 5.要求本机既是客户端又是服务器端; 编程语言及环境:
1.编程语言C/C++/C#/Java等均可;