www.pudn.com > network1.rar > network.cpp
#include#include #include #include HANDLE hSema; //定义交换路由信息的互斥信号量 HANDLE hCount; //用于修改计数器的互斥信号量 HANDLE hSend; //用于发送信息的互斥量 HANDLE hOutput; //定义显示输出时的互斥量 int Count=0; //交换信息的计数器 char lujing[20]; //记录路径序列 int counter; //路径的当前改写指针 char A[5]; //封装全局变量 class quanju{ public: int tuopu[10][10]; //保存网络拓朴结构,定义对象时加入数据 char zhuji[10][5]; //保存路由器的主机信息,定义对象时加入数据 } quanjuliang; //此类定义的对象名为quanjuliang int graph[10][10]={ {0,1,1,1,0,0,0,0,0,0}, {1,0,0,0,0,0,0,0,1,0}, {1,0,0,0,0,0,1,0,1,0}, {1,0,0,0,1,1,0,0,0,0}, {0,0,0,1,0,0,0,0,0,0}, {0,0,0,1,0,0,0,0,0,1}, {0,0,1,0,0,0,0,1,0,1}, {0,0,0,0,0,0,1,0,1,1}, {0,1,1,0,0,0,0,1,0,0}, {0,0,0,0,0,1,1,1,1,0} }; char zhj[10][5]={"AB","A","A","A","AB","A","AB","A","AB","A"}; class luyouqi{ public: char mudi[10][3]; //[i][0]为目的点;[i][1]为到目的结点的出发点;[i][2]为记录跳数, int tiaoshu[10]; char zhujibiao[10]; //记录路由器连接的主机信息 char lingju[10]; //记录邻居路由器号 char buffer[50]; //路由器的缓冲区 }thread[10]; //定义一个类数组 是不是10个路由器????????????????????? void begin() { int m=0; for(int i=0;i<10;i++) //初始化所有变量 for(int m=0;m<10;m++) { thread[i].tiaoshu[m]=0; thread[i].mudi[m][0]=thread[i].mudi[m][1]=thread[i].mudi[m][2]=0; thread[i].zhujibiao[m]=0; thread[i].lingju[m]=0; }//这个是路由器的类的初始化 for(i=0;i<10;i++) thread[i].buffer[0]=0;//路由器的缓冲区全部清空 for(i=0;i<10;i++) { m=0; for(int n=0;n<10;n++) //拷贝路由结点的邻居结点 if(quanjuliang.tuopu[i][n]==1) { thread[i].lingju[m]=n+65; m++; thread[i].mudi[n][1]=n+65; //初始化路由表的部分信息 thread[i].tiaoshu[n]=1; } thread[i].mudi[i][1]=i+65; thread[i].tiaoshu[i]=0; strcpy(thread[i].zhujibiao,quanjuliang.zhuji[i]); //拷贝路由结点所带的主机 } for(i=0;i<10;i++) for(m=0;m<10;m++) //初始化路由表其它信息 { thread[i].mudi[m][0]=m+65; if(thread[i].mudi[m][1]==0) { thread[i].mudi[m][1]='X'; thread[i].tiaoshu[m]=100; } } return; } DWORD SubThread(void * pD) { int i=(int) pD; int current=i; int count; loop: count=Count; WaitForSingleObject(hSema,INFINITE); // 锁定互斥区 for(int k=0;k<10;k++) //和邻居结点交换信息 for(int m=0;thread[current].lingju[m]!='\0';m++) { i=thread[current].lingju[m]-65; if(thread[i].tiaoshu[k]+1 >A; i=A[0]-65; if(strchr(thread[i].zhujibiao,A[1])==NULL) { cout<<"你所给的源主机不存在!!"< >thread[i].buffer; m=thread[i].buffer[0]-65; if(strchr(thread[m].zhujibiao,thread[i].buffer[1])==NULL) { cout<<"目的主机不存在!!"<