资源简介
完成端口示例代码: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数据
相关资源
- 通信软件的具体实例──基于Socket的
- 用Socket编程实现FTP
- websocket实现一对一聊天
- IOCP 类 简单的IOCP(IO完成端口)服务
- 代码客:G-TcpServer(IOCP) 1.0 正式版及
- SOCKET 网络编程 计算机网络 作业 客户
- linux 网络实验 ftp程序
- 用Socket写的简易FTP服务器和客户端
- socket小工具(可方便建立TCP UDP的soc
- socket客户端源码
- 基于CSocket的多人聊天室
- socket文件传输源码
- Socket自制系统
- HP用SOCKET实现(客户端---服务端)
- zeromq的windows版本安装包
- STM32分别以串口硬件SPI模拟并口驱动
- IOCP 一款远控的delphi源代码
- 《TCP/IP:协议分析与应用编程》课后
- linux下基于socket和curses的双人弹球游戏
- 计算机网络socket编程实验
- linux下socket can 编程详解
- FANUC机器人Socket Message通讯设置及使用
- Delphi简单实现局域网远程开机
- 易语言websocket服务器源码
- websocket规范 RFC6455 中文版
- 富士康H61S主板最新BIOS,支持22NCPU
- Socket-UDP整合消息接收,发送
- websocket-rtsp-proxy-test.zip
- 基于QTsocket的局域网聊天室
- SuperSocket服务端与客户端通信
评论
共有 条评论