手把手教你完成端口之二(应用中的完成端口简单模型)

本文详细介绍了使用完成端口IO模型进行网络编程的具体步骤,包括创建完成端口、接收客户端连接、绑定socket到完成端口、投递接收请求及处理接收到的数据等过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首要就是创建完成端口,m_hCompletionPort
//创建完成端口
m_hCompletionPort = ::CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);
第一步 等待连接到来


第二步服务器接收连接之后,将接收连接的socket和完成端口绑定(m_hSocket为完成端口)

后面有一个取消息的过程
BOOL bResult = ::GetQueuedCompletionStatus(m_hCompletionPort, &dwNumberOfBytes, (PULONG_PTR)&lpTcpContext, &lpOverlapped, INFINITE);
lpTcpContext这个上下文,取得的就是这步此时绑定的这个lpTcpContext,
第三步 向完成端口投递接收请求

BOOL bResult = ::GetQueuedCompletionStatus(m_hCompletionPort, &dwNumberOfBytes, (PULONG_PTR)&lpTcpContext, &lpOverlapped, INFINITE);
lpOverlapped 这个上下文,就是此时传进去那个。
lpNewOverlapPlus这个参数是非常怪的参数,投递的时候只投递了overLapped部分(OVERLAPPEDPLUS的第一个结构),但是实际传进去了IoRead,m_oWasBuf等参数,
在取的时候:
BOOL bResult = ::GetQueuedCompletionStatus(m_hCompletionPort, &dwNumberOfBytes, (PULONG_PTR)&lpTcpContext, &lpOverlapped, INFINITE),
先把 lpOverlapped先取出来,之后来个转换
lpOverlapPlus = (OVERLAPPEDPLUS *)lpOverlapped;
取整个OVERLAPPEDPLUS ,里面的IoRead信息都取出来了。之后想打印打印,想存内存存内存了。

后面的过程跟上一篇一样,你处理完了再次投递,供后面的消息用.
不足之处欢迎提意见改进 泰山鲁 20160913





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值