欢迎来到天天文库
浏览记录
ID:31621041
大小:268.38 KB
页数:37页
时间:2019-01-16
《iocp完全解析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、#pragmacomment(lib,"ws2_32.lib")从本质上说,完成端口模型要求创建一个windows完成端口对象,该对象通过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求提供服务。首先要创建一个I/O完成端口对象,用它面向任意数量的套接字句柄,管理多个I/O请求。调用以下函数创建完成端口对象:HANDLECreateIoCompletionPort(HANDLEFileHandle,//同IOCP关联在一起的套接字句柄HANDLEExistingCompletionPort,//I
2、OCP句柄ULONG_PTRCompletionKey,//完成健DWORDNumberOfConcurrentThreads//在IOCP上,同时允许执行的线程数量);该函数有两个作用:(1)创建一个完成端口对象(2)将一个句柄同完成端口关联到一起然后就要创建一定数量的工作者线程,以便在套接字的I/O请求投递给完成端口后,为完成端口提供服务。写文字描述很烦,还是看代码吧://NetServer3.cpp:Definestheentrypointfortheconsoleapplication.//#include"st
3、dafx.h"#include"NetServer3.h"#include#pragmacomment(lib,"ws2_32.lib")#includeusingnamespacestd;/**///////////////////////////////////////////////////////////////////////////#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=
4、__FILE__;#endif/**/////////////////////////////////////////////////////////////////////////////单句柄数据typedefstructtagPER_HANDLE_DATA{SOCKETSocket;SOCKADDR_STORAGEClientAddr;//将和这个句柄关联的其他有用信息,尽管放在这里面吧}PER_HANDLE_DATA,*LPPER_HANDLE_DATA;//但I/O操作数据typedefstructtagPER
5、_IO_DATA{OVERLAPPEDOverlapped;WSABUFDataBuf;charbuffer[1024];intBufferLen;intOperationType;//可以作为读写的标志,为简单,我忽略了}PER_IO_DATA,*LPPER_IO_DATA;DWORDWINAPIServerWorkerThread(LPVOIDlpParam);/**////////////////////////////////////////////////////////////////////////////
6、////TheoneandonlyapplicationobjectCWinApptheApp;usingnamespacestd;int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]){intnRetCode=0;//initializeMFCandprintanderroronfailureif(!AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),0)){//TODO:changeerrorcodetosuityou
7、rneedscerr<<_T("FatalError:MFCinitializationfailed")<8、//////////HANDLECompletionPort;WSADATAwsd;SYSTEM_INFOSystemInfo;SOCKADDR_INInternetAddr;SOCKETListen;//加载WinSock2.2WSAStartup(MAKEWORD(2,2),&wsd);//1.创建一个I/O完成
8、//////////HANDLECompletionPort;WSADATAwsd;SYSTEM_INFOSystemInfo;SOCKADDR_INInternetAddr;SOCKETListen;//加载WinSock2.2WSAStartup(MAKEWORD(2,2),&wsd);//1.创建一个I/O完成
此文档下载收益归作者所有