修改了的IOCP例子

发表于:2007-07-01来源:作者:点击数: 标签:
这是我照着 /*++ Copyright (c) 2004 模块名: iomodel.h 模块描述: Winsock 完成端口类头文件 作者: PPP 开发环境: Visual C++ 6.0, Windows 2000. 修订记录: 创建于: 2004.1.16 最后修改日期: 2004.1.23 --*/ 的完成端口例子,做的一个完成端口练习。 我把


这是我照着

/*++

Copyright (c) 2004

模块名:

     iomodel.h

模块描述:

     Winsock 完成端口类头文件

作者:

     PPP

开发环境:
   
     Visual C++ 6.0, Windows 2000.
    
修订记录:

     创建于: 2004.1.16

最后修改日期:
      2004.1.23


--*/

的完成端口例子,做的一个完成端口练习。


我把代码写的更清晰了一些。

还有一点,就是,我使用了一个,我叫做“双链表”的数据结构来管理IO结点和单句柄结点。这个东西是用stl里的list做的。

最开始我是用MFC的CList实现的,但是后来觉得,MFC的使用环境有局限,所以就用stl重做了一次.

 

"双链表"的原理就是:

有时我们希望以前申请的一个内存结点,用完之后,不被删除,而是放到一个“池”中,以便以后用的时候,直接到“池”中取出一个结点就可以了。

也希望有一个管理正在使用的所有结点的简单方法,所以我用一个叫做“空表”来做为结点的“池”,用另外一个表来管理当前使用的结点。

然后用一个模板类来封装这两个表,并提供一些需要的方法,使使用都通过这些简单的方法,就可以完成所有的操作。


感觉这个“双链表”,在消息结点处理,需要队列的地方,很有用处。


///////////////////////////////////////////////////////////////////////////////////////

这个文件夹里,有一个用来测试的客户端。

我还没有测试很多个连接时会是什么样.


///////////////////////////////////////////////////////////////////////////////////////

改了几个地方,但是有个问题,我没有解决:

AcceptEx可以直接得到连接者的IP和PORT,据MSDN上说,它接收到的数据为:数据+local addr + remote addr,

但是我怎么解析都没有得到remote addr,请哪位高手帮忙了。


原文转自:http://www.ltesting.net