- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
iocp_1_实现步骤
IOCP 是什么
以下就是IOCP的模型图,能看懂么?
IOCP模型(图1.1)
一IOCP实现步骤
如果懂得了IOCP的工作原理,它实现起来是很简单的。
它的实现步骤如下:
创建好IOCP
创建Socket(socket可以是由Accept得到)
将Socket关联到IOCP
socket向IOCP提交各种所需请求
IOCP操作完成之后将结果返回给socket
重复步骤3和4 ,直到socket关闭
它就那么几个步骤,但实现起来需要不少的代码。以下就以创建一个客户端的socket为例,先做部分的讲解。这里主要讲解原理,函数的参数和返回值先忽略。
1.//创建IOCP
// 利用函数CreateIoCompletionPort 创建IOCP
// 注意参数设置
m_hIocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,(ULONG_PTR)0,0);
// m_hIocp 就代表一个完成端口了
2.// 创建连接型的Socket
// 利用利用函数WSASocket创建 socket,必须指定WSA_FLAG_OVERLAPPED
m_sockClient = ::WSASocket(AF_INET,
SOCK_STREAM, IPPROTO_TCP, NULL, NULL, WSA_FLAG_OVERLAPPED);
// m_sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 这样也可以
// 默认为WSA_FLAG_OVERLAPPED
// 以下的绑定很重要,也是容易漏掉的。(如果少了绑定,在ConnextEx 时将得到错误代码:10022—提供了一个无效的参数
sockaddr_in local_addr;
ZeroMemory(local_addr, sizeof(sockaddr_in));
local_addr.sin_family = AF_INET;
int irt = ::bind(m_sockClient, (sockaddr*)(local_addr), sizeof(sockaddr_in));
// m_sockClient 是创建好的socket
3.//将Socket关联到IOCP
// 又利用上了CreateIoCompletionPort,它将socket关联到IOCP
CreateIoCompletionPort((HANDLE)m_sockClient,m_hIocp, (ULONG_PTR)m_sockClient,0);
// 已将sockClient关联到m_hIocp
// (ULONG_PTR)m_sockClient 为以后识别是那个socket的操作
4.// socket向IOCP提交各种所需请求, 这里提交的是连接请求
// 代码比较长,将整个函数都拷贝了过来
BOOL CIOCP_ClientDlg::ConnectToServer()
{
//----------------------
LPFN_CONNECTEX m_lpfnConnectEx = NULL;
DWORD dwBytes = 0;
GUID GuidConnectEx = WSAID_CONNECTEX;
// 重点,获得ConnectEx函数的指针
if (SOCKET_ERROR == WSAIoctl(m_sockClient, SIO_GET_EXTENSION_FUNCTION_POINTER,
GuidConnectEx, sizeof (GuidConnectEx),
m_lpfnConnectEx, sizeof (m_lpfnConnectEx), dwBytes, 0, 0))
{
TRACE( WSAIoctl is failed. Error code = %d, WSAGetLastError());
return FALSE;
}
MYOVERLAPPED *pmyoverlapped = new MYOVERLAPPED; // socket和I/O通讯的载体
pmyoverlapped-operateType = OP_CONNECT; // 设置请求类型,得到I/O结果时根据此 //
您可能关注的文档
- 022 TCPIP协议栈.ppt
- SimpleScalar整体工作简介.ppt
- 旧金山San Francisco Duty Report.ppt
- 操作系统ch4.8实例研究Linux虚存管理.ppt
- english-speaking countries intro母语为英语国家简介.ppt
- UNIT 4六年级I know this city.的课件.ppt
- 四季童话 课件ppt(s版语文四上).ppt
- 4-新人市场开拓沟通(10区曾庆明).ppt
- 北师大版四年级 四则运算(一).ppt
- 材料力学课件(配套孙训方的教材)4-4.ppt
- 2025年网约车司乘纠纷处理与行业规范研究报告.docx
- 体检中心服务质量评估与2025年增值服务市场前景预测报告.docx
- 2025年康复工程智能化技术与产品创新趋势报告.docx
- 2025年文创IP衍生品市场消费者购买行为分析报告.docx
- 2025年宠物智能用品市场细分领域增长潜力研究报告.docx
- 脑机接口赋能2025年儿童脑瘫康复治疗新模式研究.docx
- 卫星互联网2025年在偏远地区智能农业应用前景分析.docx
- 塑料污染治理中的2025年生产者责任延伸绿色金融产品创新与应用.docx
- 内河航运绿色船舶绿色航行与船舶噪声控制2025年研究.docx
- 2025年汉服文化在海外的传播策略与文化交流活动策划.docx
最近下载
- 基于大模型的生成式检索.pdf VIP
- 西门子伺服操作说明书-SINAMICS_V90_OPI.pdf VIP
- 电力工程施工安全与质量控制管理.docx VIP
- Packing List-装箱单表格模板.xls VIP
- 电力工程施工安全及质量控制管理.doc VIP
- 2025年最新版硫化氢考试题库大全集.doc VIP
- [江西]发电厂2×600mw级机组“上大压小”土建工程施工组织设计.doc VIP
- 《护患沟通技巧》ppt课件.pptx VIP
- 县乡教师选调进城考试《教育心理学》题库及答案(各地真题).docx VIP
- 发电厂“上大压小”2×600MW超临界空冷机组工程土建专业主要施工方案.docx VIP
文档评论(0)