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

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

?? iocp.cc

?? 介紹epoll
?? CC
字號:
/////////////////////////////////////////////////////////////////////////////////////   
//   Iocp 頭文件   

#pragma once   

#include <winsock2.h>   
#pragma comment( lib, "ws2_32.lib" )   

const int OP_READ = 0;   
const int OP_WRITE = 1;   
const int OP_ACCEPT = 2;   

/*  
OVERLAPPEDPLUS 結構體設計思路  
OVERLAPPED 是一個固定的用于處理網絡消息事件返回值的結構體變量  
在完成端口和重疊I/O模型里用于返回消息事件的結果  
因為在處理網絡消息的時候,發送的是一個返回值的結構體指針,只要結構體  
的前面部分滿足系統的要求,在系統操作成功的時候也就會把這個結構體指針  
發回給用戶,我們只要在系統定義的結構體后面擴展一些自己的東西,就可以  
很輕松的確定該消息是誰發過來的。  
不過好像完成端口在設計的時候也滿足了這樣的需求,所以在這里我只是放入  
一些與系統連接有關的數據,用戶需要存放的數據這里就不在存放  
這里存儲與系統相關的數據有:  
socket   
OpCode 本次消息的操作類型(在完成端口的操作里面,是以消息通知系統,  
讀數據/寫數據,都是要發這樣的消息結構體過去的,所以如果系統要同時  
進行讀寫操作的話,就需要有一個變量來區分操作了)  

WSABUF   wbuf;                  //   讀寫緩沖區結構體變量  
DWORD    dwBytes, dwFlags; //   一些在讀寫時用到的標志性變量  
char buf[4096];                  //   自己的緩沖區  
上面的4個變量存放的是一些與消息相關的數據,都是一些操作上用到的,  
這些東西都是固定的,具體作用需要參考一下完成端口相關函數的參數接口  
*/  
struct OVERLAPPEDPLUS   
{   
	OVERLAPPED    ol;   
	SOCKET        s;   
	int OpCode;   
	WSABUF   wbuf;   
	DWORD    dwBytes, dwFlags;   
	char buf[4096];   
};   

class CIOCP   
{   
protected:   
	HANDLE g_hwThread;     //   工作線程句柄   
	DWORD m_wthreadID;   
	HANDLE g_haThread;     //   連接線程句柄   
	DWORD m_athreadID;   
public:   
	bool m_workThread;   
	bool m_acceptThread;   
	HANDLE m_hIocp;             //   完成端口的句柄   
	SOCKET m_sSocket;   

public:   
	CIOCP(void);   
	~CIOCP(void);   
	virtual void OnRead(void * p, char *buf, int len){};   
	virtual void OnAccept(SOCKET socket);   
	virtual void OnClose(void * p){};   
	bool SetIoCompletionPort(SOCKET socket, void *p, char *buf = NULL, int len = 0);   
	//   把一個socket與一個自定義的結構體關聯到完成端口(相當于把socket與一個結構體變量進行綁定),   
	//   這樣當發送上面3種網絡事件的時候,該結構體變量會再傳回給程序   
	//   這樣就可以區分當前網絡事件是那個socket發出的   
	bool Init(void);   
	bool Listen(int port);   
	static DWORD __stdcall WorkThread(LPVOID Param);   
	static DWORD __stdcall AcceptThread(LPVOID Param);   
};   

class CIOCPClient: public CIOCP   
{   
protected:   
	SOCKET m_socket;   
public:   
	bool Connect(char *ip, int port);   
	void Send(char *buf, int len);   
};   











//////////////////////////////////////////////////////////////////////////////////////////   
//   Iocp 實現文件   

#include "StdAfx.h"   
#include "iocp.h"   

static bool bInit = false;   

DWORD __stdcall CIOCP::WorkThread(LPVOID Param)   
{   
	CIOCP * pthis = (CIOCP *)Param;   

	void * re;   
	OVERLAPPED * pOverlap;   
	DWORD berByte;   
	while(pthis->m_workThread)   
	{   
		int ret;   
		ret = GetQueuedCompletionStatus(pthis->m_hIocp, &berByte, (LPDWORD)&re, (LPOVERLAPPED *)&pOverlap, INFINITE);   

		if (ret == ERROR_SUCCESS)   
		{   

		}   

		if (berByte == 0)   
		{   
			//   客戶端斷開連接   
			pthis->OnClose(re);   
			OVERLAPPEDPLUS *olp = (OVERLAPPEDPLUS *)pOverlap;   
			closesocket(olp->s);   
			delete olp;        //   釋放 與socket綁定的結構體變量   
			continue;   
		}   

		if (re == NULL) return 0;   

		OVERLAPPEDPLUS *olp = (OVERLAPPEDPLUS *)pOverlap;   

		switch(olp->OpCode)   
		{   
		case OP_READ:   
			pthis->OnRead(re, olp->wbuf.buf, berByte);     //   調用 OnRead() 通知應用程序,服務器收到來自客戶端的網絡數據   
			WSARecv(olp->s, &olp->wbuf, 1, &olp->dwBytes, &olp->dwFlags, &olp->ol, NULL); //   繼續調用一個接收的 I/O 異步請求   
			break;   
		default:   
			break;   
		}   
	}   
	return 0;   
}   

DWORD __stdcall CIOCP::AcceptThread(LPVOID Param)   
{   
	CIOCP * pthis = (CIOCP *)Param;   
	while(pthis->m_acceptThread)   
	{   
		SOCKET client;   
		if ((client= accept(pthis->m_sSocket, NULL, NULL)) == INVALID_SOCKET)   
		{   
			//   錯誤處理   
		}   
		pthis->OnAccept(client);    //   調用 OnAccept()通知應用程序有新客戶端連接   

	}   
	return 1;   
}   

CIOCP::CIOCP(void)   
{   
}   

CIOCP::~CIOCP(void)   
{   
}   

bool CIOCP::Init(void)   
{   
	if (bInit)   
		return true;   

	WSADATA wsd;   
	if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)    
		return false;    

	bInit = true;   
	return true;   
}   

bool CIOCP::Listen(int port)   
{   
	if (!bInit)   
		if (!Init())   
			return false;   

	m_sSocket = socket(AF_INET, SOCK_STREAM, 0);    

	if (m_sSocket == INVALID_SOCKET)    
		return false;    

	//SOCKADDR_IN addr;    
	sockaddr_in addr;   
	addr.sin_family = AF_INET;    
	addr.sin_port = htons(port);    
	addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);   
	//addr.sin_addr.S_un.S_addr = inet_addr(ip);    

	if (bind(m_sSocket, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR)    
		return false;    

	if (listen(m_sSocket, 10) == SOCKET_ERROR)    
		return false;    

	if ((m_hIocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, NULL, 0)) == NULL)     //   創建完成端口的句柄   
		return false;   

	this->m_acceptThread = true;   
	g_haThread = CreateThread(NULL, 0, AcceptThread, (LPVOID)this, 0, &m_athreadID);    //   創建連接線程,用來接收客戶端的連接   

	this->m_workThread = true;   
	g_hwThread = CreateThread(NULL, 0, WorkThread, (LPVOID)this, 0, &m_wthreadID); //   創建工作線程,用來處理完成端口消息的   
	return true;   
}   

bool CIOCP::SetIoCompletionPort(SOCKET socket, void *p, char *buf, int len)   
{   
	if (CreateIoCompletionPort((HANDLE)socket, m_hIocp, (ULONG_PTR)p, 0) == NULL)   
		return false;   

	OVERLAPPEDPLUS *olp = new OVERLAPPEDPLUS;   
	memset(olp, 0, sizeof(OVERLAPPEDPLUS));   
	olp->s = socket;   
	if (buf)   
	{   
		//   這里可以使用用戶自定義的緩沖區地址,如果用戶不想設置,也可以采用默認分配的緩沖區   
		olp->wbuf.buf = buf;   
		olp->wbuf.len = len;   
	}   
	else  
	{   
		olp->wbuf.buf = olp->buf;   
		olp->wbuf.len = 4096;   
	}   
	olp->OpCode = OP_READ;   
	int ret = WSARecv(olp->s, &olp->wbuf, 1, &olp->dwBytes, &olp->dwFlags, &olp->ol, NULL);   
	if (ret == SOCKET_ERROR)   
		if (WSAGetLastError() != ERROR_IO_PENDING)   
			return false;   
	return true;   
}   

void CIOCP::OnAccept(SOCKET socket)   
{   
	this->SetIoCompletionPort(socket, NULL);   
}   

//===================================================================================   
bool CIOCPClient::Connect(char *ip, int port)   
{   
	//   連接服務器   
	if (!bInit)   
		if (!Init())   
			return false;   

	//   初始化連接socket   
	m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);   
	if (m_socket == SOCKET_ERROR)   
	{   
		//       printf("cocket Create fail");   
		return false;   
	}   

	// 填寫服務器地址信息   
	// 端口為1982   
	// IP地址為INADDR_ANY,注意使用htonl將IP地址轉換為網絡格式ServerAddr.sin_family = AF_INET;   
	sockaddr_in ClientAddr;   
	ClientAddr.sin_family = AF_INET;   
	ClientAddr.sin_port = htons(port);       
	ClientAddr.sin_addr.s_addr = inet_addr(ip);   

	// 綁定監聽端口   
	bind(m_socket, (SOCKADDR *)&ClientAddr, sizeof(ClientAddr));   

	if (connect(m_socket, (SOCKADDR *)&ClientAddr, sizeof(ClientAddr)) == SOCKET_ERROR)   
	{   
		return false;   
	}   

	if ((m_hIocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, NULL, 0)) == NULL)     //   創建完成端口的句柄   
		return false;   

	this->m_workThread = true;   
	g_hwThread = CreateThread(NULL, 0, WorkThread, (LPVOID)this, 0, &m_wthreadID); //   創建工作線程,用來處理完成端口消息的   

	this->SetIoCompletionPort(m_socket, &m_socket);    //   設置完成端口監聽的socket   
	return true;   
}   

void CIOCPClient::Send(char *buf, int len)   
{   
	send(m_socket, buf, len, 0);   
}   


///////////////////////////////////////////////////////////////////////////////////   
// IOCPclient 應用代碼   

#include "stdafx.h"   
#include "IOCP.h"   
#include "TClientSocket.h"   
class Iocp :public CIOCPClient    
{   
	void OnRead(void * p, char *buf, int len)   
	{   
		printf(buf);   
		Sleep(1000);   
		this->Send(buf, len);   
	}   
};   

int _tmain(int argc, _TCHAR* argv[])   
{   
	Iocp iocp;   
	iocp.Init();   
	iocp.Connect("127.0.0.1", 4311);   
	iocp.Send("test\0", 5);   

	gets(new char[1000]);   
	return 0;   
}  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久久久蜜桃app| 欧美va天堂va视频va在线| 91豆麻精品91久久久久久| 色婷婷综合激情| 91精品一区二区三区久久久久久| 日本一区二区在线不卡| 日韩精品乱码av一区二区| 波多野结衣欧美| 日韩欧美不卡在线观看视频| 亚洲精品乱码久久久久久久久| 性久久久久久久| 色菇凉天天综合网| 国产凹凸在线观看一区二区| 国产suv精品一区二区883| 884aa四虎影成人精品一区| 国产精品午夜在线| 久国产精品韩国三级视频| 91久久国产最好的精华液| 中文一区一区三区高中清不卡| 日韩精品乱码免费| 在线欧美日韩精品| 国产精品传媒视频| 国产精品夜夜爽| 日韩亚洲欧美高清| 视频一区视频二区在线观看| 97精品超碰一区二区三区| 欧美激情综合五月色丁香| 国产一区二区三区免费观看| 日韩欧美黄色影院| 久久成人免费电影| 日韩免费看网站| 日本在线不卡视频| 日韩欧美亚洲国产精品字幕久久久| 三级精品在线观看| 91精品在线免费观看| 日韩高清在线一区| 欧美xxx久久| 国产精品一级在线| 国产精品免费视频观看| 99久久精品免费看国产| 国产精品成人免费精品自在线观看| 粉嫩嫩av羞羞动漫久久久| 国产精品美女视频| 91免费视频观看| 亚洲国产中文字幕| 91麻豆精品91久久久久久清纯| 日本vs亚洲vs韩国一区三区二区 | 丝袜亚洲另类丝袜在线| 欧美日韩小视频| 青青国产91久久久久久| 精品久久久久久久久久久久包黑料 | 欧美精品v国产精品v日韩精品| 亚洲成精国产精品女| 日韩欧美成人午夜| 国产二区国产一区在线观看| 中文字幕日韩精品一区| 欧美性淫爽ww久久久久无| 日本女优在线视频一区二区| 欧美精品一区二区三区高清aⅴ| 国产不卡视频在线播放| 伊人性伊人情综合网| 欧美一区二区三区四区视频| 国产成人精品午夜视频免费| 亚洲激情图片小说视频| 日韩精品中文字幕一区二区三区| 国产传媒欧美日韩成人| 亚洲一线二线三线久久久| 日韩欧美国产麻豆| 99国产精品99久久久久久| 亚洲午夜av在线| 久久久精品天堂| 欧美性受xxxx黑人xyx性爽| 韩国欧美一区二区| 一区二区三区中文字幕电影| 欧美一区二区视频观看视频| 不卡在线视频中文字幕| 日本aⅴ亚洲精品中文乱码| 日本一二三四高清不卡| 欧美日韩成人激情| 成人福利在线看| 老司机精品视频导航| 亚洲一二三区在线观看| 久久久国产午夜精品| 欧美日韩在线精品一区二区三区激情| 国精产品一区一区三区mba视频| 亚洲一区二区三区国产| 国产精品少妇自拍| 日韩欧美在线一区二区三区| 一本大道av伊人久久综合| 国产精品自拍av| 午夜亚洲福利老司机| 亚洲免费在线看| 中文字幕中文字幕一区| 亚洲精品一区二区三区香蕉 | 日韩亚洲欧美在线| 欧美在线观看禁18| 99久久综合国产精品| 国内精品久久久久影院色 | 久久精品999| 偷偷要91色婷婷| 亚洲一区精品在线| 亚洲欧美激情一区二区| 国产精品久久久久一区| 26uuu精品一区二区在线观看| 777亚洲妇女| 欧美日本乱大交xxxxx| 日本二三区不卡| 色婷婷久久久久swag精品| 丁香激情综合国产| 懂色一区二区三区免费观看| 国产一区二区三区视频在线播放| 久久99久久久欧美国产| 久久国产麻豆精品| 久久国产精品一区二区| 麻豆视频观看网址久久| 久久电影网站中文字幕| 久久99精品久久久久久国产越南| 蜜桃久久精品一区二区| 老色鬼精品视频在线观看播放| 蜜臀va亚洲va欧美va天堂| 老司机精品视频线观看86| 麻豆精品视频在线观看免费| 久久66热偷产精品| 国产xxx精品视频大全| av在线播放一区二区三区| 成人av影院在线| 色综合视频在线观看| 欧美性猛片aaaaaaa做受| 欧美日韩精品一区二区天天拍小说 | 欧美老肥妇做.爰bbww视频| 欧美伦理电影网| 欧美一区二区三区免费大片 | 91污在线观看| 日本丶国产丶欧美色综合| 欧美视频在线播放| 555www色欧美视频| 久久久久免费观看| 中文字幕综合网| 午夜婷婷国产麻豆精品| 久久99久久精品| 93久久精品日日躁夜夜躁欧美| 欧洲精品视频在线观看| 欧美一区二区精品久久911| 久久精品免视看| 亚洲欧洲av一区二区三区久久| 亚洲主播在线观看| 国产美女精品一区二区三区| av在线一区二区| 69堂成人精品免费视频| 久久亚洲春色中文字幕久久久| 综合在线观看色| 久久成人久久鬼色| 91美女福利视频| 欧美va亚洲va在线观看蝴蝶网| 亚洲欧洲日韩女同| 日韩二区在线观看| 91亚洲精品一区二区乱码| 正在播放亚洲一区| 国产精品成人网| 狠狠色综合色综合网络| 91老师片黄在线观看| 精品福利在线导航| 亚洲国产一二三| 成人精品在线视频观看| 欧美一级免费大片| 亚洲青青青在线视频| 黄色精品一二区| 91精品午夜视频| 一区二区三区在线影院| 国产美女视频一区| 欧美一区二区三区视频在线| 亚洲男女一区二区三区| 国产福利91精品一区二区三区| 91精品国产色综合久久| 中文字幕一区二区不卡| 经典三级视频一区| 在线成人av影院| 一区二区三区四区国产精品| 国v精品久久久网| 精品999久久久| 奇米色777欧美一区二区| 欧美在线影院一区二区| 自拍偷拍欧美激情| 成人va在线观看| 久久久久国产精品麻豆ai换脸| 男人的j进女人的j一区| 欧美日韩免费一区二区三区视频| 综合久久久久久| 成人黄色a**站在线观看| 久久久久国产精品免费免费搜索| 蜜桃久久久久久| 日韩精品中文字幕在线不卡尤物| 午夜av区久久| 欧美日韩国产天堂| 亚洲亚洲精品在线观看| 欧美视频在线播放| 五月天网站亚洲| 日韩一区二区电影网| 青青草精品视频| 日韩午夜中文字幕|