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

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

?? iocmplt.cpp

?? 由本人編寫的一個完成端口測試程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
		  {strcpy(gameInfo->ClientName,PerIoData->gameinfo.Name);
		   gameInfo->hClient=PerHandleData->Socket;
		   printf("one join game:%s player1:%s player2:%s\n",gameInfo->GameName,gameInfo->HostName,gameInfo->ClientName);
		   sprintf(log,"one join game:%s player1:%s player2:%s\r\n",gameInfo->GameName,gameInfo->HostName,gameInfo->ClientName);
          AddLog(log,strlen(log));
           SendToClient(PerHandleData->Socket,&(char&)joininfo,sizeof(JoinInfo),SERVER_SUCCESS,PerIoData);
		   break;}		
		  }

          if(gameInfo->hClient==0)//沒有此游戲存在
		  {printf("join error have no such game!\n");
		   sprintf(log,"join error have no such game!\r\n");
           AddLog(log,strlen(log));
           SendToClient(PerHandleData->Socket,&(char&)joininfo,sizeof(JoinInfo),SERVER_FAIL,PerIoData);}			 
		  }
		 }
		 break;
	  case GAME_STATE_START://開始消息
		 {   
		  StartInfo startinfo;
		  //查找所屬游戲
		  LPGameInfo gameInfo =NULL;
		  GameInfo_POS pos;
		  gameInfo_group.GetHeadPosition( pos ); 
		  while( pos != NULL )
		  {
		   gameInfo = gameInfo_group.GetNext( pos );
		   if(PerIoData->gameinfo.Room==gameInfo->Room&&PerIoData->gameinfo.Desk==gameInfo->Desk) 
			 break;
		  }
		  if(PerHandleData->Socket==gameInfo->hHost&&gameInfo->hClient!=0)
		  {
		   strcpy(startinfo.GameName,gameInfo->GameName);
		   startinfo.player=1;
		   startinfo.numplayers=2;
		   //查client端的結構
	       LPPER_IO_OPERATION_DATA lp_io=NULL;IO_POS pos;
	       m_io_group.GetHeadPosition( pos );
	       while( pos != NULL )
		   {lp_io = m_io_group.GetNext( pos );
	        if(lp_io->gameinfo.Sock==gameInfo->hClient)	break;
		   }
	       ZeroMemory(&(lp_io->Overlapped), sizeof(OVERLAPPED));
		   printf("Game %s Start!\n",gameInfo->GameName);
		   sprintf(log,"Game %s Start!\r\n",gameInfo->GameName);
           AddLog(log,strlen(log));
		   //發開始消息
           SendToClient(PerHandleData->Socket,&(char&)startinfo,sizeof(StartInfo),SERVER_SUCCESS,PerIoData);
           startinfo.player=2;	
           SendToClient(gameInfo->hClient,&(char&)startinfo,sizeof(StartInfo),SERVER_SUCCESS,lp_io);
		  }
		  else
          SendToClient(PerHandleData->Socket,&(char&)startinfo,sizeof(StartInfo),SERVER_FAIL,PerIoData);
		}
		break;
	 case GAME_STATE_MSG://收到游戲中信息
		{
		 MsgInfo msginfo;
         ZeroMemory(&msginfo, sizeof(MsgInfo));
		 memcpy(&msginfo,&package.Buffer,package.Size);
		 //查找所屬游戲
		 LPGameInfo gameInfo =NULL;
		 GameInfo_POS pos;
		 gameInfo_group.GetHeadPosition( pos ); 
		 while( pos != NULL )
		 {
		  gameInfo = gameInfo_group.GetNext( pos );
		  if(PerIoData->gameinfo.Room==gameInfo->Room&&PerIoData->gameinfo.Desk==gameInfo->Desk) 
		  break;
		 }
		 if(PerHandleData->Socket==gameInfo->hHost)//找到所在游戲且是host
		 {strcpy(gameInfo->HostMsg,msginfo.Msg);
		  gameInfo->HostCount++;
		  printf("recv host msg %s\n",gameInfo->HostMsg);		  
          if(gameInfo->HostCount==gameInfo->ClientCount)//同步,兩者都收到才轉發
		  {sprintf(log,"recv host msg %s\r\n",gameInfo->HostMsg);
           AddLog(log,strlen(log));
		   printf("hostsend %d\n",gameInfo->HostCount);
		   sprintf(log,"hostsend %d\r\n",gameInfo->HostCount);
           AddLog(log,strlen(log));
		   ZeroMemory(&msginfo, sizeof(MsgInfo));
           strcpy(msginfo.Msg,gameInfo->HostMsg);
		   strcat(msginfo.Msg,gameInfo->ClientMsg);//合并消息
		   //找對端io結構
	       LPPER_IO_OPERATION_DATA lp_io=NULL;IO_POS pos;
	       m_io_group.GetHeadPosition( pos );
	       while( pos != NULL )
		   {lp_io = m_io_group.GetNext( pos );
		   if(lp_io->gameinfo.Sock==gameInfo->hClient)break;}
	        ZeroMemory(&(lp_io->Overlapped), sizeof(OVERLAPPED));
			//合并消息后發消息
            SendToClient(gameInfo->hHost,&(char&)msginfo,sizeof(MsgInfo),SERVER_SUCCESS,PerIoData);
            SendToClient(gameInfo->hClient,&(char&)msginfo,sizeof(MsgInfo),SERVER_SUCCESS,lp_io);
		  }       
		 }
         else 
		 {	 
		  if(PerHandleData->Socket==gameInfo->hClient)//找到所在游戲且是client
			{strcpy(gameInfo->ClientMsg,msginfo.Msg);
		     gameInfo->ClientCount++;
             printf("recv client msg %s\n",gameInfo->ClientMsg);			 
             if(gameInfo->HostCount==gameInfo->ClientCount)//同步,兩者都收到才轉發
			 {sprintf(log,"recv client msg %s\r\n",gameInfo->ClientMsg);
              AddLog(log,strlen(log));
		      printf("clientsend %d\n",gameInfo->ClientCount);
			  sprintf(log,"clientsend %d\r\n",gameInfo->ClientCount);
              AddLog(log,strlen(log));
			  ZeroMemory(&msginfo, sizeof(MsgInfo));
              strcpy(msginfo.Msg,gameInfo->HostMsg);
			  strcat(msginfo.Msg,gameInfo->ClientMsg);//合并消息
	          LPPER_IO_OPERATION_DATA lp_io=NULL;IO_POS pos;
	          m_io_group.GetHeadPosition( pos );
	          while( pos != NULL )
			  {lp_io = m_io_group.GetNext( pos );
	           if(lp_io->gameinfo.Sock==gameInfo->hHost)break;}
	          ZeroMemory(&(lp_io->Overlapped), sizeof(OVERLAPPED));
			  //發消息
              SendToClient(gameInfo->hClient,&(char&)msginfo,sizeof(MsgInfo),SERVER_SUCCESS,PerIoData);  
              SendToClient(gameInfo->hHost,&(char&)msginfo,sizeof(MsgInfo),SERVER_SUCCESS,lp_io);
			 }    
			}
		 }
		 }
		 break;
	  case GAME_STATE_END://即logout消息
		 {
		  LPGameInfo gameInfo =NULL;
		  GameInfo_POS pos;
		  gameInfo_group.GetHeadPosition( pos ); 
		  while( pos != NULL )
		  {
		   gameInfo = gameInfo_group.GetNext( pos );
		   if(PerIoData->gameinfo.Room==gameInfo->Room&&PerIoData->gameinfo.Desk==gameInfo->Desk) 
		   {printf("endgame %s\n",gameInfo->GameName);
		   sprintf(log,"endgame %s\r\n",gameInfo->GameName);
              AddLog(log,strlen(log));
		    gameInfo_group.RemoveAt(gameInfo);//刪除游戲記錄
			break;}
		  }
		  //繼續接收消息
		  Flags = 0;
		  ZeroMemory(&(PerIoData->Overlapped), sizeof(OVERLAPPED));
          PerIoData->DataBuf.len = sizeof(GameMsg);
          PerIoData->DataBuf.buf = PerIoData->Buffer;
		  PerIoData->type =IOCP_RECV;
          WSARecv(PerHandleData->Socket, &(PerIoData->DataBuf), 1, &RecvBytes, &Flags,
            &(PerIoData->Overlapped), NULL);
		 }
		 break;
	case GAME_STATE_EXIT:
		{
		  LPGameInfo gameInfo =NULL;
		  GameInfo_POS pos;
		  gameInfo_group.GetHeadPosition( pos ); 
		  while( pos != NULL )
		  {
		   gameInfo = gameInfo_group.GetNext( pos );
		   if(PerIoData->gameinfo.Room==gameInfo->Room&&PerIoData->gameinfo.Desk==gameInfo->Desk) 
		   {printf("endgame %s\n",gameInfo->GameName);
		   sprintf(log,"endgame %s\r\n",gameInfo->GameName);
              AddLog(log,strlen(log));
		    gameInfo_group.RemoveAt(gameInfo);//刪除游戲記錄
			break;}
		  }
	     printf("player:%s exit\n",PerIoData->gameinfo.Name);
		 sprintf(log,"player:%s exit\r\n",PerIoData->gameinfo.Name);
         AddLog(log,strlen(log));
         closesocket(PerHandleData->Socket);
         m_key_group.RemoveAt(PerHandleData);
         m_io_group.RemoveAt(PerIoData);
		}
	 default:break;
	 }
	}
	break;
case IOCP_SEND://是發送消息,繼續接收消息
	   { 
		 Flags = 0;
		 ZeroMemory(&(PerIoData->Overlapped), sizeof(OVERLAPPED));
         PerIoData->DataBuf.len = sizeof(GameMsg);
         PerIoData->DataBuf.buf = PerIoData->Buffer;
		 PerIoData->type =IOCP_RECV;
         WSARecv(PerHandleData->Socket, &(PerIoData->DataBuf), 1, &RecvBytes, &Flags,
            &(PerIoData->Overlapped), NULL);		 	     	
	  }
	break;
default: break; 
  }
}
}
int SendToClient(SOCKET sock,char *buf,int buflen,int nType,LPPER_IO_OPERATION_DATA pConText)
{   //發消息的函數
	DWORD  SendBytes;
	GameMsg *pNewPackage = (GameMsg*)new char[sizeof(GameMsg)];
	ZeroMemory(pNewPackage,sizeof(GameMsg));
	pNewPackage->MsgType=nType;
	memcpy(pNewPackage->Buffer,buf,buflen);
	pNewPackage->Size=buflen;
	memcpy(pConText->Buffer,pNewPackage,sizeof(GameMsg));	
	pConText->type=IOCP_SEND;
	pConText->DataBuf.buf=pConText->Buffer;
	pConText->DataBuf.len=sizeof(GameMsg);
    WSASend(sock, &(pConText->DataBuf), 1, &SendBytes, 0,&(pConText->Overlapped), NULL); 
	delete pNewPackage;
	return 1;
}
void AddLog(const char *strInfo,DWORD size)
{
	DWORD dwWaitResult = WaitForSingleObject (hMutex,INFINITE); 
	switch (dwWaitResult)
	{
	case WAIT_OBJECT_0:
		{
			CreateDirectory("LOG",NULL);
				HANDLE hFile;
				hFile=CreateFile("LOG\\Log.txt",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
				if(hFile==INVALID_HANDLE_VALUE)
				{
					ReleaseMutex (hMutex);
					return;
				}
				::SetFilePointer(hFile,NULL,NULL,FILE_END);
				
				DWORD dwByte;
				WriteFile(hFile,strInfo,size,&dwByte,NULL);

				FlushFileBuffers(hFile);
				CloseHandle(hFile);
				hFile=NULL;
			ReleaseMutex (hMutex);
			return ;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品高清不卡| 色噜噜狠狠色综合欧洲selulu | 久久久久9999亚洲精品| 亚洲欧美另类久久久精品2019| 日韩av在线播放中文字幕| 不卡高清视频专区| 久久午夜电影网| 日韩国产欧美三级| 91成人在线观看喷潮| 欧美国产精品一区二区三区| 精品亚洲国内自在自线福利| 91精品福利视频| 国产精品电影一区二区| 国产一区二区三区免费| 日韩欧美一区中文| 一区二区三区四区乱视频| 国产成人精品综合在线观看 | 国产日韩欧美a| 国产在线播精品第三| 欧美精品久久久久久久多人混战 | 国产成人福利片| 欧美一区二区成人6969| 偷窥少妇高潮呻吟av久久免费| 91丨porny丨在线| 亚洲人精品午夜| av激情成人网| 国产精品每日更新| 成人免费视频app| 国产欧美视频一区二区| 国产成人亚洲精品狼色在线| 久久蜜桃av一区二区天堂| 韩国欧美国产1区| 91精品国产综合久久福利软件| 亚洲aⅴ怡春院| 日韩亚洲电影在线| 另类小说一区二区三区| 欧美videos大乳护士334| 免费成人在线影院| 精品剧情v国产在线观看在线| 青椒成人免费视频| 精品精品国产高清a毛片牛牛| 国内成人免费视频| 久久精品人人做人人爽人人| 成人综合激情网| 自拍偷拍亚洲欧美日韩| 色欧美乱欧美15图片| 亚洲高清免费在线| 日韩一级免费一区| 成人一区二区三区中文字幕| 1000精品久久久久久久久| 在线观看视频一区二区| 天天av天天翘天天综合网色鬼国产| 欧美性猛交一区二区三区精品| 亚洲成人激情自拍| 欧美大白屁股肥臀xxxxxx| 国产激情视频一区二区三区欧美| 亚洲国产岛国毛片在线| 91福利视频在线| 麻豆极品一区二区三区| 国产精品毛片高清在线完整版| 一本大道综合伊人精品热热 | 亚洲色图另类专区| 91精品国产综合久久久久久久久久 | 国产精一区二区三区| 亚洲欧美色图小说| 日韩一区二区三区在线视频| 成人久久久精品乱码一区二区三区| 一区二区三区精品久久久| 日韩精品一区二区三区视频在线观看| 国产综合色精品一区二区三区| 日韩美女精品在线| 精品va天堂亚洲国产| 在线观看日韩毛片| 精品一区二区三区不卡| 亚洲午夜精品在线| 久久久久久久久免费| 欧美日韩免费一区二区三区 | 免费观看91视频大全| 1区2区3区国产精品| 精品国产91亚洲一区二区三区婷婷 | 日韩久久一区二区| 久久久久久久久久久黄色| 欧美日韩在线播放三区四区| 国产福利一区在线观看| 视频在线在亚洲| 亚洲伦理在线免费看| 久久精品人人爽人人爽| 欧美一区二区三区电影| 日本韩国视频一区二区| 国产一区不卡精品| 日本中文字幕一区二区视频| 亚洲精品视频自拍| 国产精品污网站| 久久精品人人爽人人爽| 日韩欧美电影一二三| 欧美揉bbbbb揉bbbbb| 91免费看视频| 波多野结衣欧美| www.亚洲国产| 国产高清久久久| 捆绑调教一区二区三区| 五月天欧美精品| 亚洲资源中文字幕| 亚洲欧洲日本在线| 国产精品国产三级国产专播品爱网 | 国产精品1区2区| 久久成人麻豆午夜电影| 亚洲18影院在线观看| 亚洲成av人片在线观看无码| 亚洲综合在线免费观看| 亚洲激情图片一区| 一区二区三区四区中文字幕| 亚洲欧美激情在线| 一区二区三区在线观看欧美| 亚洲精品一二三四区| 亚洲三级在线看| 亚洲精品一卡二卡| 亚洲一区二区三区四区中文字幕| 一区二区三区在线视频免费 | 成人一二三区视频| 国产高清不卡一区| 成人丝袜18视频在线观看| 国产成人8x视频一区二区| 波多野结衣视频一区| 91免费国产在线| 欧洲一区二区三区在线| 欧美精三区欧美精三区| 欧美久久一区二区| 日韩一区二区电影| 26uuu亚洲综合色| 亚洲欧洲日韩av| 亚洲不卡av一区二区三区| 日韩精品视频网| 国产精品一品视频| 色欧美88888久久久久久影院| 欧美日韩免费观看一区二区三区| 欧美一级夜夜爽| 中文字幕欧美国产| 亚洲第一主播视频| 精品一区二区三区日韩| 97久久超碰精品国产| 欧美久久一二三四区| 久久精品亚洲精品国产欧美kt∨ | 美女网站视频久久| 不卡一区中文字幕| 91麻豆精品国产91久久久久久| 欧美精品一区视频| 一区二区三区中文字幕| 精品一区二区综合| 色婷婷激情综合| 久久综合久久99| 玉米视频成人免费看| 久久电影网电视剧免费观看| 成人va在线观看| 日韩三级视频中文字幕| 国产精品久久二区二区| 视频一区视频二区中文| 成人免费视频视频在线观看免费| 欧美久久一二区| 成人免费在线视频| 裸体歌舞表演一区二区| 91福利资源站| 欧美极品少妇xxxxⅹ高跟鞋| 日韩在线a电影| 色94色欧美sute亚洲线路二| 精品对白一区国产伦| 亚洲国产日日夜夜| 成人sese在线| 久久综合网色—综合色88| 亚洲一区二区成人在线观看| 国产成人自拍网| 欧美一级在线观看| 亚洲国产裸拍裸体视频在线观看乱了 | 国产精品传媒视频| 久久爱www久久做| 91精品91久久久中77777| 中文在线资源观看网站视频免费不卡| 天天色图综合网| 欧美日韩一本到| 亚洲精品福利视频网站| 丁香天五香天堂综合| 久久久www免费人成精品| 美日韩一级片在线观看| 91精品中文字幕一区二区三区| 亚洲伦理在线精品| 99久久婷婷国产| 国产精品久久久久天堂| 国产酒店精品激情| 久久综合久久综合久久综合| 久久精品国产免费| 日韩午夜在线影院| 麻豆精品国产传媒mv男同| 欧美一区二区三区色| 石原莉奈一区二区三区在线观看| 色偷偷一区二区三区| 亚洲精品久久7777| 欧美性色欧美a在线播放| 亚洲综合一区二区三区| 欧美视频第二页| 视频一区欧美精品|