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

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

?? iocmplt.cpp

?? 由本人編寫的一個完成端口測試程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include "DataStruct.h"


#pragma comment(lib, "Ws2_32")
HANDLE  hMutex;
char log[50];
void AddLog(const char *strInfo,DWORD size);
void main(void)
{
	
   SOCKADDR_IN InternetAddr,RemoteAddr;
   SOCKET Listen;
   SOCKET Accept;
   HANDLE CompletionPort;
   SYSTEM_INFO SystemInfo;
   unsigned int i;
   DWORD RecvBytes;
   DWORD Flags;
   DWORD ThreadID;
   WSADATA wsaData;
   DWORD Ret;
   hMutex = CreateMutex (NULL,FALSE,TEXT("LOGObject"));
   if ((Ret = WSAStartup(0x0202, &wsaData)) != 0)//初始化sock
   {
      printf("WSAStartup failed with error %d\n", Ret);
      return;
   }

   // Setup an I/O completion port.

   if ((CompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0)) == NULL)
   {
      printf( "CreateIoCompletionPort failed with error: %d\n", GetLastError());
      return;
   }

   // Determine how many processors are on the system.

   GetSystemInfo(&SystemInfo);

   // Create worker threads based on the number of processors available on the
   // system. Create two worker threads for each processor.

   for(i = 0; i < SystemInfo.dwNumberOfProcessors * 2; i++)//建立工作者線程
   {
      HANDLE ThreadHandle;

      // Create a server worker thread and pass the completion port to the thread.

      if ((ThreadHandle = CreateThread(NULL, 0, ServerWorkerThread, CompletionPort,
         0, &ThreadID)) == NULL)
      {
         printf("CreateThread() failed with error %d\n", GetLastError());
         return;
      }

      // Close the thread handle
      CloseHandle(ThreadHandle);
   }

   // Create a listening socket

   if ((Listen = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0,
      WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)//建立監聽sock
   {
      printf("WSASocket() failed with error %d\n", WSAGetLastError());
      return;
   } 
   printf("create socket ok\n");
   strcpy(log,"");
   sprintf(log,"create socket ok\r\n");
   AddLog(log,strlen(log));
   InternetAddr.sin_family = AF_INET;
   InternetAddr.sin_addr.s_addr = htonl(INADDR_ANY);
   InternetAddr.sin_port = htons(PORT);

   if (bind(Listen, (PSOCKADDR) &InternetAddr, sizeof(InternetAddr)) == SOCKET_ERROR)//綁定
   {
      printf("bind() failed with error %d\n", WSAGetLastError());
      return;
   }
   printf("bind port %d ok\n",PORT);
   sprintf(log,"bind port %d ok\r\n",PORT);
   AddLog(log,strlen(log));
   // Prepare socket for listening

   if (listen(Listen, 200) == SOCKET_ERROR)//監聽
   {
      printf("listen() failed with error %d\n", WSAGetLastError());
      return;
   }
   printf("listen ok\n");
   sprintf(log,"listen ok\r\n");
   AddLog(log,strlen(log));
   // Accept connections and assign to the completion port.
   int j=sizeof(RemoteAddr);
   while(TRUE)
   {
      if ((Accept = WSAAccept(Listen, (PSOCKADDR) &RemoteAddr,&j, NULL, 0)) == SOCKET_ERROR)//接收連接
      {
         printf("WSAAccept() failed with error %d\n", WSAGetLastError());
         return;
      }
      LPPER_HANDLE_DATA lp_key = m_key_group.GetBlank();

      // Associate the accepted socket with the original completion port.
      
	  printf("%s connected\n", inet_ntoa(RemoteAddr.sin_addr));//顯示對端地址
	  strcpy(log,"");
      sprintf(log,"%s connected\r\n", inet_ntoa(RemoteAddr.sin_addr));
      AddLog(log,strlen(log));
      lp_key->Socket = Accept;

      if (CreateIoCompletionPort((HANDLE) Accept, CompletionPort, (DWORD) lp_key,
         0) == NULL)//將新sock綁定到完成端口
      {
         printf("CreateIoCompletionPort failed with error %d\n", GetLastError());
         return;
      }

      // Create per I/O socket information structure to associate with the 
      // WSARecv call below.
       LPPER_IO_OPERATION_DATA lp_io = m_io_group.GetBlank();
	 
      //為單IO數據結構賦初值
      ZeroMemory(&(lp_io->Overlapped), sizeof(OVERLAPPED));
	  lp_io->gameinfo.Room=0;
	  lp_io->gameinfo.Desk=0;     	  
	  lp_io->gameinfo.Sock=Accept;
      //lp_io->BytesSEND = 0;
      //lp_io->BytesRECV = 0;
      lp_io->DataBuf.len = sizeof(GameMsg);
      lp_io->DataBuf.buf = lp_io->Buffer;
	  lp_io->type=IOCP_RECV;

      Flags = 0;//一個in/out參數
      if (WSARecv(Accept, &(lp_io->DataBuf), 1, &RecvBytes, &Flags,
         &(lp_io->Overlapped), NULL) == SOCKET_ERROR)//接收一次
      {
         if (WSAGetLastError() != ERROR_IO_PENDING)
         {
            printf("WSARecv() failed with error %d\n", WSAGetLastError());
            return;
         }
      }
   }
}
DWORD WINAPI ServerWorkerThread(LPVOID CompletionPortID)//工作者線程
{
   HANDLE CompletionPort = (HANDLE) CompletionPortID;
   DWORD BytesTransferred;
   LPPER_HANDLE_DATA PerHandleData;
   LPPER_IO_OPERATION_DATA PerIoData;
   DWORD RecvBytes;
   DWORD Flags;
   
 while(TRUE)
 {    if (GetQueuedCompletionStatus(CompletionPort, &BytesTransferred,
         (LPDWORD)&PerHandleData, (LPOVERLAPPED *) &PerIoData, INFINITE) == 0)
      {
         printf("GetQueuedCompletionStatus failed with error %d\n", GetLastError());
         return 0;
      }        
		 ZeroMemory(&(PerIoData->Overlapped), sizeof(OVERLAPPED));
         PerIoData->DataBuf.buf = PerIoData->Buffer ;
         PerIoData->DataBuf.len = BytesTransferred ;
switch(PerIoData->type)
{
 case IOCP_RECV://是接收消息
	{
	 GameMsg package;
	 memcpy(&(char&)package,&PerIoData->Buffer,BytesTransferred);//得到所發的信息
	switch(package.MsgType)
	 {
	  case GAME_STATE_LOGIN://登陸消息
		 {
		  LoginInfo login;
		  ZeroMemory(&login, sizeof(LoginInfo));
		  memcpy(&login,&package.Buffer,package.Size);
		  PerIoData->gameinfo.Room=login.Room;
          PerIoData->gameinfo.Desk=login.Desk;
	      strcpy(PerIoData->gameinfo.Name,login.Name);
		  printf("player login room:%d desk:%d name:%s\n", login.Desk ,PerIoData->gameinfo.Room,PerIoData->gameinfo.Name);
		  sprintf(log,"player login room:%d desk:%d name:%s\r\n", login.Desk ,PerIoData->gameinfo.Room,PerIoData->gameinfo.Name);
          AddLog(log,strlen(log));
		  PerIoData->type=IOCP_SEND;
          SendToClient(PerHandleData->Socket,&(char&)login,sizeof(LoginInfo),SERVER_SUCCESS,PerIoData);
		 }
		 break;
	  case GAME_STATE_CREATE://創建游戲消息
		 {
		  CreateInfo createinfo;
	      ZeroMemory(&createinfo, sizeof(CreateInfo));
		  memcpy(&createinfo,&package.Buffer,package.Size);	
		  LPGameInfo gameInfo = gameInfo_group.GetBlank();//分配空間,保存游戲信息
		  gameInfo->Room=PerIoData->gameinfo.Room;
          gameInfo->Desk=PerIoData->gameinfo.Desk;
	      strcpy(gameInfo->HostName,PerIoData->gameinfo.Name);
		  gameInfo->hHost=PerHandleData->Socket;
		  gameInfo->hClient=0;
		  gameInfo->ClientCount=0;
	 	  gameInfo->HostCount=0;
		  strcpy(gameInfo->GameName,createinfo.GameName);
		  printf("player:%s create game:%s\n",gameInfo->HostName,gameInfo->GameName);
          sprintf(log,"player:%s create game:%s\r\n",gameInfo->HostName,gameInfo->GameName);
          AddLog(log,strlen(log));
          SendToClient(PerHandleData->Socket,&(char&)createinfo,sizeof(CreateInfo),SERVER_SUCCESS,PerIoData);
		 }
		 break;
	  case GAME_STATE_JOIN://加入游戲信息
		 {
		  JoinInfo joininfo;
		  ZeroMemory(&joininfo, sizeof(JoinInfo));
		  memcpy(&joininfo,&package.Buffer,package.Size);
		  //查找是否已存在此游戲
		  LPGameInfo gameInfo =NULL;
		  GameInfo_POS pos;
		  gameInfo_group.GetHeadPosition( pos );
		  if(pos==NULL)
		  {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);}
		  else
		  {
		  while( pos != NULL )
		  {
		  gameInfo = gameInfo_group.GetNext( pos );
		  if(PerIoData->gameinfo.Room==gameInfo->Room&&PerIoData->gameinfo.Desk==gameInfo->Desk
			&&gameInfo->hClient==0&&(strcmp(gameInfo->GameName,joininfo.GameName)==0))

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费在线观看视频| 久久综合久久综合久久| 国产成人精品午夜视频免费| 水蜜桃久久夜色精品一区的特点| 亚洲乱码国产乱码精品精98午夜| 国产精品久久久久婷婷二区次| 国产精品久久久久影视| 日韩理论片在线| 一区二区三区欧美视频| 婷婷开心久久网| 欧美aaaaaa午夜精品| 久草在线在线精品观看| 国产成人免费视频一区| 成人a区在线观看| 欧洲精品一区二区三区在线观看| 91官网在线观看| 欧美一区三区四区| 久久久亚洲精品一区二区三区 | 欧美三级日韩在线| 欧美精品123区| 久久综合九色综合欧美亚洲| 国产精品卡一卡二| 亚洲18女电影在线观看| 精品一区在线看| 播五月开心婷婷综合| 欧美亚洲免费在线一区| xnxx国产精品| 一区二区三区在线高清| 毛片av中文字幕一区二区| 粉嫩嫩av羞羞动漫久久久| 欧美三级三级三级爽爽爽| 久久久久久99精品| 亚洲国产欧美在线人成| 国产精品一区二区三区99| 91麻豆国产在线观看| 日韩午夜在线观看视频| 亚洲欧洲日产国码二区| 日韩国产欧美在线观看| 不卡一区中文字幕| 日韩免费在线观看| 亚洲精品高清视频在线观看| 老司机午夜精品| 91成人在线精品| 国产欧美精品一区二区三区四区| 日韩国产一二三区| 日本伦理一区二区| 国产精品久久久久一区| 蜜桃视频一区二区三区| 欧美性感一区二区三区| 国产女同互慰高潮91漫画| 免费在线看一区| 欧美色视频在线| 国产精品欧美一级免费| 国产在线乱码一区二区三区| 欧美性受xxxx黑人xyx| 国产精品美女久久久久久久网站| 男女男精品网站| 欧美人动与zoxxxx乱| 综合久久一区二区三区| 成人开心网精品视频| 久久久青草青青国产亚洲免观| 亚洲制服丝袜一区| eeuss鲁片一区二区三区| 久久久久综合网| 麻豆极品一区二区三区| 在线观看91av| 五月天激情综合网| 欧美日韩高清一区二区不卡| 亚洲乱码国产乱码精品精可以看| av午夜精品一区二区三区| 久久精品这里都是精品| 国产精品一二三四| 精品女同一区二区| 久99久精品视频免费观看| 这里是久久伊人| 美女脱光内衣内裤视频久久影院| 91精品久久久久久蜜臀| 天天操天天综合网| 欧美一级精品在线| 激情综合网激情| 国产亚洲一区字幕| 波多野结衣中文字幕一区二区三区 | 国产河南妇女毛片精品久久久| 欧美成人国产一区二区| 久久精品国产亚洲一区二区三区| 日韩一二三区视频| 精品一区二区免费视频| 国产亚洲欧美激情| 欧美精选午夜久久久乱码6080| 亚洲大片在线观看| 91精品国产综合久久小美女 | 欧美夫妻性生活| 午夜电影一区二区| 久久免费美女视频| 91亚洲精品久久久蜜桃| 午夜精品成人在线| 精品国产一区久久| 国产一区二区在线免费观看| 成人免费一区二区三区在线观看 | 3d动漫精品啪啪一区二区竹菊| 日韩国产欧美一区二区三区| 欧美成人vr18sexvr| 成人免费视频网站在线观看| 亚洲国产欧美日韩另类综合| 欧美大片顶级少妇| 99国产精品久久久久| 视频一区二区三区在线| 国产精品久久三区| 91精品国产色综合久久ai换脸| 国产一区二区美女诱惑| 国产精品电影院| 欧美麻豆精品久久久久久| 国产一区不卡在线| 亚洲国产成人porn| 国产精品护士白丝一区av| 91精品国产综合久久久蜜臀粉嫩| 国产精品 欧美精品| 亚洲超碰精品一区二区| 久久网站最新地址| 欧美日韩国产经典色站一区二区三区 | 精品久久久久99| 欧美性受xxxx黑人xyx性爽| 国产精品乱人伦中文| 一本大道av一区二区在线播放| 亚洲国产一区二区在线播放| 久久亚洲精华国产精华液| 欧美性生活大片视频| 国产精品一二三四五| 成人h版在线观看| 国产一区 二区| 免费av网站大全久久| 亚洲精品日韩综合观看成人91| 精品国产123| 欧美一区二区视频在线观看 | 日韩电影一区二区三区| 综合精品久久久| 国产精品毛片大码女人| 久久综合色一综合色88| 日韩三级视频在线看| 欧美理论在线播放| 欧美日韩国产综合视频在线观看 | 欧美一区二区三区思思人| 91免费国产视频网站| 国产成人在线视频网址| 免费成人av资源网| 亚洲国产成人tv| 亚洲成a人v欧美综合天堂下载 | 免费看日韩精品| 亚洲国产视频网站| 亚洲高清免费在线| 亚洲综合成人在线| 亚洲国产精品自拍| 五月婷婷色综合| 蜜桃av噜噜一区| 国产精品99久久久久久有的能看| 国内成人自拍视频| 国产成人久久精品77777最新版本| 成人综合在线视频| 99久久亚洲一区二区三区青草| 成人av电影在线观看| 色偷偷成人一区二区三区91| 99re8在线精品视频免费播放| 不卡的电影网站| 在线免费观看视频一区| 欧美日韩国产欧美日美国产精品| 91精品福利在线一区二区三区 | 99久久国产免费看| 色琪琪一区二区三区亚洲区| 欧美日韩综合不卡| 日韩精品一区二区在线观看| 精品少妇一区二区三区视频免付费 | 美女久久久精品| 国产美女精品人人做人人爽| 成人av网站在线| 在线免费观看视频一区| 欧美一区二区三区在线观看视频| www激情久久| 国产精品不卡一区二区三区| 亚洲国产精品一区二区尤物区| 偷拍自拍另类欧美| 九色综合国产一区二区三区| 不卡一区二区中文字幕| 欧美精选一区二区| 国产亚洲午夜高清国产拍精品| 亚洲日韩欧美一区二区在线| 日韩av电影一区| 成人一二三区视频| 欧美日韩在线播放一区| 精品奇米国产一区二区三区| 亚洲女厕所小便bbb| 蜜桃视频一区二区三区在线观看| 成人性色生活片| 91精品国产麻豆| 亚洲天堂福利av| 毛片av中文字幕一区二区| av欧美精品.com| 精品乱人伦一区二区三区| 亚洲激情图片小说视频| 国产一区二区三区在线观看免费视频| av电影在线观看不卡|