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

来源:互联网 发布:男士滑雪帽 知乎 编辑:程序博客网 时间:2024/05/18 23:54

新项目终于进入收尾阶段了,现在补一篇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关闭应用程序截图。






0 0
原创粉丝点击