亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲国产精品久久久久秋霞影院 | 18涩涩午夜精品.www| 欧美在线观看一区二区| 久久99深爱久久99精品| 一区二区欧美视频| 国产三级欧美三级日产三级99 | 日韩视频免费观看高清完整版在线观看 | 成人免费在线观看入口| 日韩色在线观看| 欧美性色欧美a在线播放| 国产宾馆实践打屁股91| 强制捆绑调教一区二区| 亚洲影视在线播放| 国产精品免费视频观看| 日韩一区二区视频在线观看| 91免费观看视频在线| 国产成人一级电影| 国产一区二区三区久久悠悠色av| 午夜精品福利在线| 亚洲一区二区三区小说| 国产精品成人免费在线| 久久精品夜色噜噜亚洲aⅴ| 精品三级在线观看| 日韩免费在线观看| 日韩亚洲欧美在线观看| 91精品黄色片免费大全| 欧美日韩五月天| 在线日韩av片| 欧美综合视频在线观看| 色噜噜夜夜夜综合网| 色综合色狠狠综合色| fc2成人免费人成在线观看播放| 国产激情一区二区三区四区 | 91精选在线观看| 欧美视频一区二区三区四区| 在线观看日韩电影| 欧美日韩国产在线观看| 欧美日韩在线观看一区二区 | 日韩中文字幕亚洲一区二区va在线 | 欧美日韩免费不卡视频一区二区三区 | 天堂一区二区在线| 五月婷婷激情综合网| 亚洲电影视频在线| 天堂蜜桃91精品| 久久国产精品99久久人人澡| 精品在线一区二区三区| 国产精品自拍一区| 成人精品在线视频观看| 99国产欧美另类久久久精品| 色婷婷综合久久久| 欧美精品成人一区二区三区四区| 91精品国产福利在线观看| 日韩天堂在线观看| 久久久久久久综合日本| 国产精品国产精品国产专区不蜜 | 奇米色777欧美一区二区| 久久精品噜噜噜成人88aⅴ| 激情五月播播久久久精品| 国产成人综合亚洲网站| 9i看片成人免费高清| 欧美午夜电影在线播放| 欧美一卡在线观看| 国产女主播在线一区二区| 亚洲三级免费观看| 五月综合激情网| 精品亚洲porn| 91丨国产丨九色丨pron| 欧美蜜桃一区二区三区| 国产三级一区二区| 亚洲久草在线视频| 精品制服美女丁香| 91麻豆蜜桃一区二区三区| 欧美日本在线一区| 国产亚洲视频系列| 亚洲图片有声小说| 久久爱另类一区二区小说| 成人黄页毛片网站| 欧美一级久久久久久久大片| ww亚洲ww在线观看国产| 亚洲免费观看高清完整| 韩日精品视频一区| 色婷婷av一区二区三区软件| 精品福利一二区| 一区二区三区在线看| 国产一区二区在线看| 欧洲亚洲精品在线| 欧美激情资源网| 日韩精品每日更新| 成人国产精品免费| 精品奇米国产一区二区三区| 亚洲色图在线看| 国产一区二区精品久久99| 欧美视频在线一区| 国产精品久久精品日日| 久久99精品一区二区三区三区| 色综合中文字幕国产 | 337p日本欧洲亚洲大胆精品| 一区二区三区欧美| 成人免费视频caoporn| 日韩无一区二区| 亚洲高清在线精品| 成人久久18免费网站麻豆| 日韩欧美国产综合| 亚洲午夜久久久久久久久电影院| 国产 日韩 欧美大片| 欧美电影影音先锋| 亚洲免费视频成人| 成人av在线网| 国产网站一区二区| 精品一区二区三区视频在线观看| 欧美系列在线观看| 亚洲视频一二三| 成人性生交大片免费看中文网站| 日韩免费一区二区| 日韩一区欧美二区| 欧美亚洲日本国产| 一区二区三区精品在线| av中文字幕不卡| 国产三区在线成人av| 国产一区啦啦啦在线观看| 日韩女同互慰一区二区| 亚洲h在线观看| 欧美日韩一区久久| 亚洲超丰满肉感bbw| 91国偷自产一区二区开放时间| 国产精品日日摸夜夜摸av| 国产真实乱偷精品视频免| 欧美α欧美αv大片| 免费久久精品视频| 91精品国产色综合久久不卡电影| 性做久久久久久免费观看| 欧美日韩视频在线观看一区二区三区 | 成人精品鲁一区一区二区| 国产日韩亚洲欧美综合| 国内精品国产成人| 久久色中文字幕| 国产精品主播直播| 日本一区二区高清| 99精品国产99久久久久久白柏| 国产精品福利一区二区三区| 播五月开心婷婷综合| 国产精品福利电影一区二区三区四区| 国产99精品国产| 亚洲色欲色欲www| 欧美视频第二页| 秋霞av亚洲一区二区三| 日韩一区二区三区观看| 热久久一区二区| 久久综合九色综合久久久精品综合| 精品一区二区三区不卡| 久久久久97国产精华液好用吗| 成人综合在线观看| 亚洲视频狠狠干| 日本乱码高清不卡字幕| 日韩电影网1区2区| 久久一区二区视频| av激情综合网| 午夜成人免费视频| 久久婷婷综合激情| 99国内精品久久| 奇米777欧美一区二区| 国产亚洲精品中文字幕| 色婷婷精品久久二区二区蜜臂av| 偷拍一区二区三区四区| 久久精品这里都是精品| 色哟哟欧美精品| 久久精品国产澳门| 亚洲欧美综合另类在线卡通| 欧美男男青年gay1069videost| 国内精品视频一区二区三区八戒| 欧美激情一区二区三区| 欧美日韩在线观看一区二区| 国产综合色视频| 一区二区三区丝袜| 欧美va在线播放| 成人高清视频在线| 免费成人在线视频观看| 国产精品欧美一区二区三区| 欧美日韩国产高清一区二区三区 | 欧美色图12p| 国产露脸91国语对白| 亚洲一区二区四区蜜桃| 精品黑人一区二区三区久久| 国产福利一区二区三区视频在线| 一区二区三区精品视频在线| 久久婷婷国产综合精品青草| 91麻豆国产精品久久| 精品一区二区三区久久久| 一区二区久久久久| 久久精品视频网| 7878成人国产在线观看| 99国产精品久久久久久久久久| 久久国产综合精品| 一区二区三区中文免费| 国产视频一区二区在线| 日韩一区二区免费高清| 一本色道**综合亚洲精品蜜桃冫| 国产在线精品免费| 日韩成人免费在线| 一区二区三区在线视频播放|