[网络开发]IOCP完整例子

作者: NickYang 分类: 技术文章,程序开发 发布时间: 2012-04-09 21:49

本文是我在学习IOCP的时候,第一次写一个完整的例子出来,当然了,参考了CSDN上一些朋友的博客,大部分都是按照他们的思路写的,毕竟我是初学者,参考现成的学起来比较快。当然了,真正用到项目中的IOCP肯定不止这么简单的,还有内存池,环形缓冲区,socket连接池等高端内容,后面我会参考一些例子,写出一个完整的给大家看。

前面讲过IOCP里面一个很重要的东西就是IO重叠了,所以结构体里有一个OVERLAPPED结构。

整个过程还是类似于最基础的socket连接方式,主要部分就是使用IOCP的两个函数,创建IOCP和检测当前的状态。

大家先凑活看吧,后面本博客会有更精彩的IOCP内容呈现给大家,我也是逐步在学习,大家稍安勿躁。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

11条评论
  • 三只熊

    2017 年 9 月 1 日 11:58

    不知道您有在项目中运用了吗

    潜水 Chrome浏览器 Windows 7 x64 Edition
    1. NickYang

      2017 年 9 月 1 日 12:02

      已经用libevent,libuv,asio等比较成熟的网络库了

      站长 QQ浏览器 Windows 7 x64 Edition
      1. 三只熊

        2017 年 9 月 1 日 21:24

        那你觉得这些那个比较优秀一点好用一些。

        潜水 Safari浏览器 Mac OS X
  • 以C威武

    2014 年 9 月 19 日 16:40

    我使用了GetAcceptExSockAddrs函数但是得到的IP仍然为0.0.0.0是怎么回事

    潜水 Chrome浏览器 Windows 8.1 x64 Edition
    1. eliteYang

      2014 年 9 月 19 日 17:22

      你得具体点说

      神话 Chrome浏览器 Windows 7 x64 Edition
  • neicole

    2012 年 5 月 7 日 22:43

    ❓ 有个问题想弱弱地问一下楼主,很多范例中的套接字的都是先bind()再listen()的,而楼主的程序是先listen()再bind(),不知道这样会不会有什么风险呢?假如有个客户端进来了,然后,服务器这边还没有bind()到本机上,不知道这种情况会不会发生?

    潜水 傲游浏览器 Windows 7 x64 Edition
    1. eliteYang

      2012 年 5 月 7 日 23:21

      一般的确是先bind,然后再listen。你说的是正确的,文章中的例子可能有点误导你了,我只是先创建了一个ListenSocket,然后是bind,下来是listen啊,顺序是没有错的。不过,拿游戏服务器之间通讯来说,A服务器要跟B服务器通讯,必须等到连接上,然后通知连接上了,然后才能开始服务器,不然算作服务器没有完全启动,暂时还不能提供通讯服务。游戏登陆不就是这样么,GameServer资源加载完了,并不算启动好了,要等到连接到CenterServer和DBServer,然后GateServer注册进来才算启动好了。

      神话 Chrome浏览器 Windows 7
      1. neicole

        2012 年 5 月 8 日 08:01

        😛 嘿嘿,谢谢楼主的耐心而详细地解疑,MS明白了很多啦~

        潜水 傲游浏览器 Windows 7 x64 Edition
        1. eliteYang

          2012 年 5 月 8 日 21:47

          不客气,交流愉快

          神话 Chrome浏览器 Windows 7
  • neicole

    2012 年 5 月 5 日 09:57

    🙂 在做SRP的时候要用到IOCP的知识,向楼主学习了,文章讲得很清晰,谢谢~

    潜水 傲游浏览器 Windows 7 x64 Edition
    1. eliteYang

      2012 年 5 月 5 日 14:09

      谢谢你的访问,希望文章对你有用。

      神话 Chrome浏览器 Windows 7

发表评论

电子邮件地址不会被公开。 必填项已用*标注