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<<"目的主机不存在!!"<