亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tcp_sub.cpp

?? 這是一個在正實際應用當中運行的電力監控系統軟件源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

#include "tcp_win.h"

#ifdef _TCZ_
   #include "def.h"
   #include "wincomm.h"
#else
  #include "scada.h"
#endif

//---------------------------------------------------------------------------------------------
NODESTATUS NodeStatus[NODEMAXNUM];
//---------------------------------------------------------------------------------------------
char    ATBRouterNo=-1;//平安報文中加入的轉發器節點號,當前轉發器將其置為本機NodeNo,其它機器置為-1
						//當當前轉發器發現自己不夠轉發器條件時,將其置為-2以告知其它候補轉發器立即工作
						//從而不必等待判斷 Router.DelayCount > R_MAXDELAYCOUNT 的延遲時間
						 
DWORD   ATBNet1IPAddr=INADDR_NONE;
//---------------------------------------------------------------------------------------------
static     NODEINFO   NodeInfo;
static     ROUTER     Router;
static     BOOL       CanBeRouter;
static     BOOL       TransTable[NODEMAXNUM][NODEMAXNUM];
//---------------------------------------------------------------------------------------------
void  InitHostNodeStatus();                //在TcpWin::SetupWindow中被調用
void  ProRcvGram(LPSTR Buf,DWORD dwIPAddr);//在TcpWin接收到一份新報文后被調用
void  UpdateNodeStatus();//在TcpWin::WMTimer中被調用
void  UpdateTransTable();//在TcpWin::WMTimer中被調用
void  DispNodeStatus();  //在TcpWin::WMTimer中被調用
void  PutAStr(HDC hdc,int y,LPSTR s1,LPSTR s2,LPSTR s3,LPSTR s4,LPSTR s5);

static void  GetNodeInfo(LPSTR Buf);              //被ProRcvGram()調用
static void  ProATBInfo(LPSTR Buf);
static void  ProTransfer(int NodeNo,LPSTR Buf);
static void  SwapNetInfo(); //交換NodeStatus中Net1與Net2中的信息,及TcpWin中的SubnetIPAddr[0]與SubnetIPAddr[1]

//---------------------------------------------------------------------------------------------
void InitHostNodeStatus(){

 int i,j;

  for(i=0;i<NODEMAXNUM;i++){
	 NodeStatus[i].Net1.IsConnect=FALSE;
	 NodeStatus[i].Net1.IPAddr=INADDR_NONE;
	 NodeStatus[i].Net1.DelayCount=0;

	 NodeStatus[i].Net2.IsConnect=FALSE;
	 NodeStatus[i].Net2.IPAddr=INADDR_NONE;
	 NodeStatus[i].Net2.DelayCount=0;
	}

  Router.InUse=FALSE;
  Router.NodeNo=-1;
  Router.DelayCount=0;

  CanBeRouter=FALSE;

  for( i=0;i<NODEMAXNUM;i++)
	  for(j=0;j<NODEMAXNUM;j++)
		   TransTable[i][j]=FALSE;

  ATBRouterNo=-1;
  ATBNet1IPAddr=INADDR_NONE;

  NetRcv[0].RxCount=NetSend.TxCount=0;
}
//---------------------------------------------------------------------------------------
void SwapNetInfo(){

  NETNODE TempNetNode;

  for(int i=0;i<NODEMAXNUM;i++)
   {
	TempNetNode=NodeStatus[i].Net1;
	NodeStatus[i].Net1=NodeStatus[i].Net2;
	NodeStatus[i].Net2=TempNetNode;
   }

  pTcpWin->SwapNetIP();
}
//---------------------------------------------------------------------------------------
void GetNodeInfo(LPSTR Buf){

   GRAMHEAD far *gHead = (GRAMHEAD far *)Buf;
   GRAMINF _FAR *gi=(GRAMINF _FAR *)(Buf+sizeof (GRAMHEAD));

   BYTE NodeType,NodeName;
   int Maxnum;

   NodeType=gHead->SourceType;//*(Buf+2);
   NodeName=gHead->SourceName;//*(Buf+3);

   if(NodeType=='F')        {   NodeInfo.NodeType='F'; Maxnum=FERTNODEMAXNUM; }
	 else if(NodeType=='H') {   NodeInfo.NodeType='H'; Maxnum=HOSTNODEMAXNUM; }
		  else                  NodeInfo.NodeType=-1;

   if(NodeInfo.NodeType!=-1)
     {
	  if((NodeName>='A') && ( NodeName<'A'+Maxnum) ){
		  NodeInfo.NodeName=NodeName;
		  NodeInfo.NodeNo=NodeName-'A';
		  NodeInfo.CmdCode=gi->CmdCode;
		  }
	  else NodeInfo.NodeType=NodeInfo.NodeName=NodeInfo.NodeNo=-1;
	 }

}
//---------------------------------------------------------------------------------------
void ProATBInfo(LPSTR Buf)
{
  //1.-----------------
  char  RouterNo=*(Buf+sizeof(GRAMHEAD)+sizeof(GRAMINF)+sizeof(CREGISTER)+2);    //7+4+4+2==17
  if( (NodeInfo.NodeType=='H')  &&
      (RouterNo>=0) && (RouterNo<HOSTNODEMAXNUM)
    )
	  	   {
			Router.InUse=TRUE;
			Router.NodeNo=RouterNo;
			Router.DelayCount=0;
		   }

  #ifndef _TCZ_
  else if( (RouterNo==-2)&&( ! ((Router.InUse==TRUE)&&(Router.NodeNo==Addr->scadainf.NodeId-'A'))))
		   {
			Router.InUse=FALSE;
			Router.NodeNo=-1;
			Router.DelayCount=0;
		   }
  #endif
  //2.-----------------
  DWORD Net1IPAddr=*(DWORD *)(Buf+sizeof(GRAMHEAD)+sizeof(GRAMINF)+sizeof(CREGISTER)+3);
  if (
			(Net1IPAddr!=INADDR_NONE)                      &&
            (NodeInfo.NodeType=='H')                       &&
		 //	(NodeInfo.NodeName==GetMainHostName ())        &&
		 //	(GetMainHostName () != ThisNodeName)           &&
			(Net1IPAddr!=pTcpWin->GetThisSubnetIPAddr(0))  &&
			(Net1IPAddr==pTcpWin->GetThisSubnetIPAddr(1))
     )
	   {
		 SwapNetInfo();
       }

}
//---------------------------------------------------------------------------------------
void H_ProRcvGram(LPSTR Buf,DWORD dwIPAddr){

  int NodeNo=0;
  
  GetNodeInfo(Buf);

  if(NodeInfo.NodeType=='H')       NodeNo=NodeInfo.NodeNo;
  else if(NodeInfo.NodeType=='F')  NodeNo=NodeInfo.NodeNo+HOSTNODEMAXNUM;
	   else return ;// Error Datagram or Mis broadcast Datagram

  if(NodeInfo.CmdCode==ATB) ProATBInfo(Buf);

  //收到x機的報文,說明本機與x機之間至少有一條網絡通道通信正常
  //任何情形,只對由一條通道發來的x機的報文進行處理,但Net1優先
  if( pTcpWin->GetSubnetFromHost(dwIPAddr)==pTcpWin->GetThisSubnetIPAddr(0) )
	    {
		  NodeStatus[NodeNo].Net1.IsConnect=TRUE;
		  NodeStatus[NodeNo].Net1.IPAddr=dwIPAddr;
		  NodeStatus[NodeNo].Net1.DelayCount=0;

		  NetRcv[0].RxCount++;
		  SetRcvData (Buf);
        }
  else  if( pTcpWin->GetSubnetFromHost(dwIPAddr)==pTcpWin->GetThisSubnetIPAddr(1) )
	      {
		   NodeStatus[NodeNo].Net2.IsConnect=TRUE;
		   NodeStatus[NodeNo].Net2.IPAddr=dwIPAddr;
		   NodeStatus[NodeNo].Net2.DelayCount=0;

		   if(NodeStatus[NodeNo].Net1.IsConnect==FALSE)
			   NetRcv[0].RxCount++;
			   SetRcvData (Buf);
		  }

   #ifndef _TCZ_
   ProTransfer(NodeNo,Buf);
   #endif
}
//---------------------------------------------------------------------------------------
#ifndef _TCZ_
void ProTransfer(int NodeNo,LPSTR Buf) //處理路由轉發
{
  //如果本機是當前轉發器就根據轉發表 ( TransTable[][] ) 進行轉發  (注:直接發送給目的主機而非廣播發送)
  if( (Router.InUse==TRUE)&&(Router.NodeNo==Addr->scadainf.NodeId-'A') )
	 for(int j=0;j<NODEMAXNUM;j++)
      {
		if(TransTable[NodeNo][j]==TRUE)
		  {
		   if( NodeNo>=HOSTNODEMAXNUM && j>=HOSTNODEMAXNUM)
		      if(NodeInfo.CmdCode!=ATB) break; //前置機之間只轉發平安報文
		   if(NodeStatus[j].Net1.IsConnect != NodeStatus[j].Net2.IsConnect)
			  if(NodeStatus[j].Net1.IsConnect==TRUE)
					pTcpWin->SendData2Host(Buf,NodeStatus[j].Net1.IPAddr);
			  else
                {
				  if(NodeStatus[j].Net2.IsConnect==TRUE)
					pTcpWin->SendData2Host(Buf,NodeStatus[j].Net2.IPAddr);
			    }
		  }
      }
}
#endif
//---------------------------------------------------------------------------------------
void UpdateNodeStatus(){

   for(int i=0;i<NODEMAXNUM;i++)
	{
	 if(NodeStatus[i].Net1.IsConnect==TRUE)
         {
		   NodeStatus[i].Net1.DelayCount++;
		   if(NodeStatus[i].Net1.DelayCount>H_MAXDELAYCOUNT)
			{
             NodeStatus[i].Net1.IsConnect=FALSE;
			 NodeStatus[i].Net1.IPAddr=INADDR_NONE;
			 NodeStatus[i].Net1.DelayCount=0;
            }
         }
	 if(NodeStatus[i].Net2.IsConnect==TRUE)
		 {
		   NodeStatus[i].Net2.DelayCount++;
		   if(NodeStatus[i].Net2.DelayCount>H_MAXDELAYCOUNT)
			{
             NodeStatus[i].Net2.IsConnect=FALSE;
			 NodeStatus[i].Net2.IPAddr=INADDR_NONE;
			 NodeStatus[i].Net2.DelayCount=0;
            }
         }

	}


  if(Router.InUse==TRUE)
	{
	  Router.DelayCount++;
	  if(Router.DelayCount>R_MAXDELAYCOUNT)
			{
			  Router.InUse=FALSE;
			  Router.NodeNo=-1;
			  Router.DelayCount=0;
            }
    }

  #ifndef _TCZ_
   if(GetMainHostName () == ThisNodeName)
	   ATBNet1IPAddr=pTcpWin->GetThisSubnetIPAddr(0);
   else ATBNet1IPAddr=INADDR_NONE;
  #endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲va天堂va国产va久| 青椒成人免费视频| 中文字幕不卡三区| 久久久91精品国产一区二区三区| 日韩丝袜情趣美女图片| 欧美日韩国产另类一区| 精品视频1区2区| 欧美精品99久久久**| 欧美日韩国产免费| 日韩一级二级三级精品视频| 日韩女优电影在线观看| 欧美高清视频不卡网| 91精品国产日韩91久久久久久| 欧美日韩精品一区二区| 91精品国产品国语在线不卡| 日韩精品一区二区三区老鸭窝| 久久综合狠狠综合久久综合88 | 欧美性生活影院| 99久久夜色精品国产网站| 日本道色综合久久| 欧美日韩国产欧美日美国产精品| 欧美一级欧美三级在线观看| 久久久久久久久久美女| 亚洲欧美成aⅴ人在线观看| 午夜视频一区二区| 国内一区二区视频| 99久久国产综合精品麻豆| 欧美日本免费一区二区三区| 欧美一区二区三区精品| 国产偷国产偷亚洲高清人白洁| 亚洲男人天堂一区| 六月丁香婷婷久久| 一本久久精品一区二区| 精品sm捆绑视频| 综合色中文字幕| 蜜桃久久精品一区二区| 91色九色蝌蚪| 欧美一级二级三级乱码| 亚洲欧美日韩在线| 狂野欧美性猛交blacked| 97久久精品人人澡人人爽| 日韩一区二区三区免费观看| 中文字幕在线一区二区三区| 日韩和欧美一区二区| 91在线视频官网| 久久久久88色偷偷免费| 亚洲在线观看免费| 国产suv一区二区三区88区| 欧美体内she精高潮| 国产欧美综合色| 美女爽到高潮91| 欧美三级在线播放| 亚洲免费视频成人| 国产成人综合网| 日韩一级大片在线观看| 亚洲午夜精品在线| 色综合中文综合网| 色婷婷精品大在线视频 | 国产成人免费在线观看| 欧美日韩成人在线一区| 亚洲欧美乱综合| 成人黄色小视频在线观看| 久久香蕉国产线看观看99| 午夜av一区二区| 欧美在线观看一区二区| 中文字幕一区二区视频| 国产黄色精品视频| 欧美电影免费观看高清完整版在线 | 久久综合色天天久久综合图片| 无吗不卡中文字幕| 欧美丝袜丝交足nylons图片| 最新国产成人在线观看| 粗大黑人巨茎大战欧美成人| 久久奇米777| 国产丶欧美丶日本不卡视频| 欧美videos中文字幕| 美国欧美日韩国产在线播放| 91精品国产全国免费观看| 偷窥国产亚洲免费视频| 欧美高清www午色夜在线视频| 亚洲超碰精品一区二区| 欧美人狂配大交3d怪物一区| 天天综合天天综合色| 宅男在线国产精品| 国产在线视频不卡二| 久久嫩草精品久久久精品| 国产成人综合在线| 亚洲另类色综合网站| 欧美日韩亚洲丝袜制服| 视频一区二区不卡| 欧美精品一区二区三区蜜臀| 国产一区二区精品久久99| 中文字幕成人网| 色综合久久综合中文综合网| 日韩成人av影视| 2024国产精品| 91视频91自| 日本欧美在线观看| 国产偷国产偷精品高清尤物| 91小视频免费观看| 青青青伊人色综合久久| 中文字幕av资源一区| 在线精品视频一区二区三四 | 91麻豆精品国产91久久久久 | 色婷婷久久一区二区三区麻豆| 一区二区三区日韩在线观看| 日韩一级成人av| 97久久精品人人爽人人爽蜜臀| 亚洲一区二区av电影| 精品成人免费观看| 色综合网色综合| 精品一区二区免费看| 亚洲伦理在线免费看| 日韩免费电影一区| 91老司机福利 在线| 国产自产2019最新不卡| 亚洲精品亚洲人成人网在线播放| 日韩小视频在线观看专区| www.色综合.com| 精一区二区三区| 亚洲美女免费视频| 久久久精品综合| 91精品国产综合久久精品麻豆| 国产成人激情av| 麻豆国产91在线播放| 洋洋av久久久久久久一区| 国产网红主播福利一区二区| 欧美另类高清zo欧美| 成人禁用看黄a在线| 美女尤物国产一区| 亚洲一区二区三区四区不卡| 久久精品一区四区| 日韩欧美一二区| 欧美日韩精品二区第二页| 成年人网站91| 国产91精品一区二区麻豆网站| 日本一区中文字幕| 亚洲综合图片区| 亚洲精品成人天堂一二三| 国产精品看片你懂得| 国产视频不卡一区| 精品国产123| 国产色一区二区| 日韩你懂的在线观看| 欧美电影一区二区三区| 欧洲精品在线观看| 91免费视频网址| 成人免费毛片aaaaa**| 国产精品一区二区三区99| 经典三级视频一区| 激情综合一区二区三区| 久久99最新地址| 韩国女主播一区二区三区| 免费人成在线不卡| 久久国产三级精品| 狠狠色丁香久久婷婷综| 黑人巨大精品欧美一区| 国产一区二区在线影院| 国产精品亚洲专一区二区三区 | 成人小视频免费观看| 成人免费观看av| 色婷婷综合久久久久中文 | 91亚洲国产成人精品一区二三 | 精品粉嫩超白一线天av| 精品欧美久久久| 国产女人18毛片水真多成人如厕| 久久夜色精品一区| 国产精品日产欧美久久久久| 亚洲日本在线a| 亚洲第一主播视频| 麻豆一区二区三| 国产成人亚洲综合色影视| 在线中文字幕不卡| 3atv一区二区三区| 2021中文字幕一区亚洲| 中文字幕在线观看不卡| 亚洲精品乱码久久久久久日本蜜臀| 亚洲综合久久av| 久久精品国产亚洲aⅴ| 成人美女在线视频| 欧美性生活影院| xf在线a精品一区二区视频网站| 中文字幕va一区二区三区| 一区二区三区毛片| 久久精品国产精品亚洲精品| 成人h动漫精品| 91精品国产综合久久精品图片| 久久精品日产第一区二区三区高清版| 中文字幕第一区| 日韩国产高清在线| 成人激情校园春色| 宅男在线国产精品| 中文字幕制服丝袜成人av| 美女脱光内衣内裤视频久久网站 | 欧美精品乱码久久久久久 | 欧美电视剧在线看免费| 1024国产精品| 国产一区二三区好的| 欧美色综合久久| 国产精品久久久久aaaa樱花 |