资源简介
完成端口示例代码:IOCPExample_By_PiggyXP.rar
代码片段和文件信息
#include “StdAfx.h“
#include “IOCPModel.h“
#include “MainDlg.h“
// 每一个处理器上产生多少个线程(为了最大限度的提升服务器性能,详见配套文档)
#define WORKER_THREADS_PER_PROCESSOR 2
// 同时投递的Accept请求的数量(这个要根据实际的情况灵活设置)
#define MAX_POST_ACCEPT 10
// 传递给Worker线程的退出信号
#define EXIT_CODE NULL
// 释放指针和句柄资源的宏
// 释放指针宏
#define RELEASE(x) {if(x != NULL ){delete x;x=NULL;}}
// 释放句柄宏
#define RELEASE_HANDLE(x) {if(x != NULL && x!=INVALID_HANDLE_VALUE){ CloseHandle(x);x = NULL;}}
// 释放Socket宏
#define RELEASE_SOCKET(x) {if(x !=INVALID_SOCKET) { closesocket(x);x=INVALID_SOCKET;}}
CIOCPModel::CIOCPModel(void):
m_nThreads(0)
m_hShutdownEvent(NULL)
m_hIOCompletionPort(NULL)
m_phWorkerThreads(NULL)
m_strIP(DEFAULT_IP)
m_nPort(DEFAULT_PORT)
m_pMain(NULL)
m_lpfnAcceptEx( NULL )
m_pListenContext( NULL )
{
}
CIOCPModel::~CIOCPModel(void)
{
// 确保资源彻底释放
this->Stop();
}
///////////////////////////////////////////////////////////////////
// 工作者线程: 为IOCP请求服务的工作者线程
// 也就是每当完成端口上出现了完成数据包,就将之取出来进行处理的线程
///////////////////////////////////////////////////////////////////
DWORD WINAPI CIOCPModel::_WorkerThread(LPVOID lpParam)
{
THREADPARAMS_WORKER* pParam = (THREADPARAMS_WORKER*)lpParam;
CIOCPModel* pIOCPModel = (CIOCPModel*)pParam->pIOCPModel;
int nThreadNo = (int)pParam->nThreadNo;
pIOCPModel->_ShowMessage(“工作者线程启动,ID: %d.“nThreadNo);
OVERLAPPED *pOverlapped = NULL;
PER_SOCKET_CONTEXT *pSocketContext = NULL;
DWORD dwBytesTransfered = 0;
// 循环处理请求,知道接收到Shutdown信息为止
while (WAIT_object_0 != WaitForSingleobject(pIOCPModel->m_hShutdownEvent 0))
{
BOOL bReturn = GetQueuedCompletionStatus(
pIOCPModel->m_hIOCompletionPort
&dwBytesTransfered
(PULONG_PTR)&pSocketContext
&pOverlapped
INFINITE);
// 如果收到的是退出标志,则直接退出
if ( EXIT_CODE==(DWORD)pSocketContext )
{
break;
}
// 判断是否出现了错误
if( !bReturn )
{
DWORD dwErr = GetLastError();
// 显示一下提示信息
if( !pIOCPModel->HandleError( pSocketContextdwErr ) )
{
break;
}
continue;
}
else
{
// 读取传入的参数
PER_IO_CONTEXT* pIoContext = CONTAINING_RECORD(pOverlapped PER_IO_CONTEXT m_Overlapped);
// 判断是否有客户端断开了
if((0 == dwBytesTransfered) && ( RECV_POSTED==pIoContext->m_OpType || SEND_POSTED==pIoContext->m_OpType))
{
pIOCPModel->_ShowMessage( _T(“客户端 %s:%d 断开连接.“)inet_ntoa(pSocketContext->m_ClientAddr.sin_addr) ntohs(pSocketContext->m_ClientAddr.sin_port) );
// 释放掉对应的资源
pIOCPModel->_RemoveContext( pSocketContext );
continue;
}
else
{
switch( pIoContext->m_OpType )
{
// Accept
case ACCEPT_POSTED:
{
// 为了增加代码可读性,这里用专门的_DoAccept函数进行处理连入请求
pIOCPModel->_DoAccpet( pSocketContext pIoContext );
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
I.A.... 21877 2011-08-30 12:40 PiggyIOCPServer_2008\PiggyIOCPServer\IOCPModel.cpp
文件 8164 2011-08-30 12:40 PiggyIOCPServer_2008\PiggyIOCPServer\IOCPModel.h
文件 4950 2011-08-30 12:40 PiggyIOCPServer_2008\PiggyIOCPServer\MainDlg.cpp
文件 1446 2010-12-28 15:20 PiggyIOCPServer_2008\PiggyIOCPServer\MainDlg.h
文件 59672 2009-10-07 00:29 PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.aps
文件 1709 2009-09-30 10:19 PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.cpp
文件 497 2009-10-06 15:53 PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.h
文件 5804 2009-10-07 00:29 PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.rc
文件 5878 2010-12-28 15:05 PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.vcproj
文件 1413 2009-10-09 17:10 PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.vcproj.HAOTHINK.Hao Wang.user
文件 1419 2011-02-28 18:04 PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.vcproj.HAOWANGBOOK.Thinkpad.user
文件 1405 2010-09-01 02:03 PiggyIOCPServer_2008\PiggyIOCPServer\PiggyIOCPServer.vcproj.MYPC.Piggy.user
文件 2723 2009-09-30 10:19 PiggyIOCPServer_2008\PiggyIOCPServer\ReadMe.txt
文件 21630 2003-07-23 17:52 PiggyIOCPServer_2008\PiggyIOCPServer\res\PiggyIOCPServer.ico
文件 405 2009-09-30 10:26 PiggyIOCPServer_2008\PiggyIOCPServer\res\PiggyIOCPServer.rc2
文件 163 2009-10-06 23:46 PiggyIOCPServer_2008\PiggyIOCPServer\res\vssver2.scc
文件 868 2009-09-30 10:41 PiggyIOCPServer_2008\PiggyIOCPServer\resource.h
文件 146 2009-09-30 10:19 PiggyIOCPServer_2008\PiggyIOCPServer\stdafx.cpp
文件 1772 2011-08-30 12:40 PiggyIOCPServer_2008\PiggyIOCPServer\stdafx.h
文件 1030 2009-10-07 00:15 PiggyIOCPServer_2008\PiggyIOCPServer\targetver.h
文件 594 2009-09-27 09:25 PiggyIOCPServer_2008\PiggyIOCPServer\XPst
文件 138752 2011-08-30 12:40 PiggyStressTestClient.exe
目录 0 2011-08-30 12:39 PiggyIOCPServer_2008\PiggyIOCPServer\res
目录 0 2011-08-30 12:40 PiggyIOCPServer_2008\PiggyIOCPServer
目录 0 2011-11-02 10:02 PiggyIOCPServer_2008
----------- --------- ---------- ----- ----
282317 25
- 上一篇:spc统计过程控制软件破解版.XLS
- 下一篇:全国主要公路SHP数据
相关资源
- 使用TCPServer编写多线程socket服务
- Qt 多线程使用 QTcpSocket及QTimer
- Socket双向通信基础代码
- 套接字Socket通信TCP聊天程序含界面
- 1306176648Sockets进行文件传输.zip
- cocos2dx3.x使用socket创建服务端和客户端
- VC Socket GET_POST发送HTTP请求
- 利用Asio网络库建立自己的Socket服务器
- Xzhi_socket接收与发送图片(终结者)
- 默认使用DES加密聊天信息的SocketChat(
- 有连接的socket通信posix)
- socket编程_windows_linux_数据传输
- windows平台下socket编程之TCP
- Unity3D使用socket通讯源码
- Linux下利用TCPsocket传输图片
- 使用Socket传输视频
- 使用Socket传输音频
- 多线程Socket.
- WEBSOCKET_fleck.dll
- zw_socket5proxy.zip
- 五子棋局域网联机版
- IOCP 客户端和服务端
- Socket Raw实现的IPV4INIPV6 UDP数据包发送
- QUdpSocket 多线程编程 moveToThread
- Qt使用udp协议,简单易懂
- SpringBoot WebSocket消息推送群发和指定到
- socket通信 基于udp
- 华农网络编程socket通信
- Qt socket的文件传输
- CASyncSocket客户端服务器框架完整代码
评论
共有 条评论