欢迎来到天天文库
浏览记录
ID:18106568
大小:91.00 KB
页数:8页
时间:2018-09-13
《手把手教你玩转socket模型之重叠io篇》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、手把手教你玩转SOCKET模型之重叠I/O篇“身为一个初学者,时常能体味到初学者入门的艰辛,所以总是想抽空作点什么来尽我所能的帮助那些需要帮助的人。我也希望大家能把自己的所学和他人一起分享,不要去鄙视别人索取时的贪婪,因为最应该被鄙视的是不肯付出时的吝啬。”-----题记ByPiggyXP(小猪)前言其实我首先应该道歉,因为7月份的时候曾信誓旦旦的说要写一套关于SOCKET所有模型的入门文章以及配套代码,不过没想到后天竟然被美女所迷出去度假了,刚刚回来不久。。。。。。-_-b其实那些模型的配套代码我已经基本写完了,只是没写配套文字,不过我想还是先从稍微
2、难一点的模型写起吧,因为其他模型的入门毕竟要简单一些。不过由于也是初学者,疏漏之处还望不吝指正。本文凝聚着笔者心血,如要转载,请指明原作者及出处,谢谢!^_^OK,Let’sgo!Havefun!!q^_^p本文配套的示例源码下载地址(VC.net2003编写的多客户端MFC代码,配有详尽注释,只是简单的显示一下客户端发来的字符,稍加改进就是个聊天室了):http://www.haha567.com/PiggyXP/OverlappedModel.rar(unix系统,千万注意链接大小写)非常感谢网络版的limin兄弟为我无偿提供的空间,以及在我学习过
3、程中给我的大力帮助与支持,真的非常感谢他,感激涕零啊~~~~~T_T也欢迎大家光临他的Blog一起讨论网络技术http://blog.haha567.com/(本文假设你已经具备用SOCKET简单模型编程的能力,如果对SOCKET一无所知请关注本系列其他文章)目录:1.重叠模型的优点2.重叠模型的基本原理3.关于重叠模型的基础知识4.重叠模型的实现步骤5.多客户端情况的注意事项一. 重叠模型的优点1. 可以运行在支持Winsock2的所有Windows平台,而不像完成端口只是支持NT系统。2. 比起阻塞、selec
4、t、WSAAsyncSelect以及WSAEventSelect等模型,重叠I/O(OverlappedI/O)模型使应用程序能达到更佳的系统性能。因为它和这4种模型不同的是,使用重叠模型的应用程序通知缓冲区收发系统直接使用数据,也就是说,如果应用程序投递了一个10KB大小的缓冲区来接收数据,且数据已经到达套接字,则该数据将直接被拷贝到投递的缓冲区。而这4种模型种,数据到达并拷贝到单套接字接收缓冲区中,此时应用程序会被告知可以读入的容量。当应用程序调用接收函数之后,数据才从单套接字缓冲区拷贝到应用程序的缓冲区,差别就体现出来了。otherstaffof
5、theCentre.Duringthewar,ZhuwastransferredbacktoJiangxi,andDirectorofthenewOfficeinJingdezhen,JiangxiCommitteeSecretary.Startingin1939servedasrecorderoftheWestNorthOrganization,SecretaryoftheSpecialCommitteeAfterthevictoryofthelongMarch,hehasbeentheNorthwestOfficeoftheFederationof
6、StateenterprisesMinister,ShenmufuguSARmissions,DirectorofNingxiaCountypartyCommitteeSecretaryandrecorderoftheCountypartyCommitteeSecretary,Ministersand3. 从《windows网络编程》中提供的试验结果中可以看到,在使用了P41.7GXero处理器(CPU很强啊)以及768MB的回应服务器中,最大可以处理4万多个SOCKET连接,在处理1万2千个连接的时候CPU占用率才40%左右――非常好的性能,
7、已经直逼完成端口了^_^二. 重叠模型的基本原理说了这么多的好处,你一定也跃跃欲试了吧,不过我们还是要先提一下重叠模型的基本原理。概括一点说,重叠模型是让应用程序使用重叠数据结构(WSAOVERLAPPED),一次投递一个或多个WinsockI/O请求。针对这些提交的请求,在它们完成之后,应用程序会收到通知,于是就可以通过自己另外的代码来处理这些数据了。需要注意的是,有两个方法可以用来管理重叠IO请求的完成情况(就是说接到重叠操作完成的通知):1. 事件对象通知(eventobjectnotification)2.
8、 完成例程(completionroutines),注意,这里并不是完成端口而本文只是讲述如何
此文档下载收益归作者所有