我的IOCP学习笔记 - 运行展示

本文通过一系列工程实例,详细展示了IOCP(I/O完成端口)在Windows下的运用,包括fileIocp工程的简单IOCP操作、acceptEx服务端与客户端的AcceptEx和GetAcceptExSockaddrs使用、transport服务端与客户端的WSASend和WSARecv演示,以及EasyIocp服务端和EasyClient客户端的“4字节头部+实际数据”通信方式。这些例子逐步揭示了IOCP在处理高并发网络连接和数据传输中的工作原理。
摘要由CSDN通过智能技术生成

新项目终于进入收尾阶段了,现在补一篇blog。想起来我学IOCP时看见运行结果时,自然而然便会弄懂一些疑惑,所以这里展示一下运行结果。

   1)工程fileIocp。如下图所示。比较简单。在代码中定义了一个结构体。运行时输入参数 nrec 表示写入到文件中此结构体的数量。写入文件时是用IOCP,然后同步读取文件进行校验。这应该是最简单的IOCP例子了。


2)工程acceptEx(服务端)工程acceptExClient(客户端)。这个工程就是用来展示AcceptEx、GetAcceptExSockaddrs和WSASocket使用方式。函数AcceptEx的参数和函数GetAcceptExSockaddrs参数是对应的。因此程序暂时两方面:1.函数AcceptEx在建立新的连接时便会返回,2.函数AcceptEx在建立连接后切接收到数据后才会返回。

2.1)如下图是AcceptEx直接返回。客户端运行截图在此图下发。

如下图客户端运行截图。

2.2)如下图是AcceptEx在接收到数据时才返回。

注:上面说AcceptEx函数返回是指AcceptEx操作完成,相应的完成端口数据包到达,函数GetQueuedCompletionStatus返回。

如下是在键盘输入CTRL + C关闭程序。


   3)工程transport(服务端)工程transportClient(客户端),该工程用来展示函数WSASend和函数WSARecv使用。监听套接字是函数socket返回的,与客户端通信的数据收发套接字是函数accept返回的。MSDN文档说明socket函数创建的套接字默认具有重叠属性,可以直接使用相关的IOCP接口。

如下图是transport运行。transport仅仅是把transportClient发来的数据返回给transportClient。

下图是transportClient运行截图。

再下张图是CTRL+C关闭程序。


   4)最后就是正式的IOCP例子。工程EasyIocp(服务端)工程EasyClient(客户端)。二者通信方式是"4字节头部+实际数据"部分。采用这种通信方式EasyIocp在接收到数据时,自己就知道此完整数据字节数,在完整的接收完数据后就可以通知应用层数据接收完毕(这里还仅仅是例子,完整的应用还有待完善)。

下图是服务端运行截图。首先投递accept等待客户端连接,在DoAccept函数中处理客户端连接并投递recv请求。在DoRecv函数中处理数据接收,并投递send请求。数据收发逻辑也大概都如此。

下图是客户端运行截图。

最后是CTRL+C关闭应用程序截图。






评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值