- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在Winsock中,重叠I/O(Overlapped I/O)模型能使应用程序达到更佳的性能。重叠模型的基本原理是让应用程序使用一个重叠的数据结构,一次投递一个或多个Winsock的I/O请求。针对那些提交的请求,在它们完成之后,应用程序可为它们提供服务。自Winsock 2.0发布开始,重叠I/O便已集成到新的Winsock函数中,比如WSASend和WSARecv等。因此,重叠I/O模型适用于安装了Winsock 2.0的所有Windows平台。 重叠I/O模型 7.4 * 8.4.1 重叠I/O(Overlapped?I/O)模型的优点 (1)可以运行在支持Winsock2的所有Windows平台?。 (2)使用重叠模型的应用程序通知缓冲区收发系统直接使用数据。能使应用程序性能更佳,优于阻塞、select、WSAAsyncSelect以及WSAEventSelect等模型。 (3)可以处理数万SOCKET连接,且性能良好。 * 7.4.2 重叠I/O模型的基本原理 重叠模型的基本原理是让应用程序使用一个重叠的数据结构,一次投递一个或多个Winsock I/O请求。当系统完成I/O操作后通知应用程序。系统向应用程序发送通知的形式有两种:事件通知,或者完成例程。由应用程序设置接收I/O操作完成的通知形式。 * 7.4.3 重叠I/O模型的关键函数和数据结构 1.创建套接字 SOCKET s = WSASocket(AF_INET, SOCK_STEAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED); 2.WSAOVERLAPPED结构 typedef? struct ?_WSAOVERLAPPED?{? DWORD?Internal;? DWORD?InternalHigh;? DWORD?Offset; DWORD?OffsetHigh; WSAEVENT?hEvent; //?此参数用来关联WSAEvent对象? }?WSAOVERLAPPED,?*LPWSAOVERLAPPED;? * 3.输入输出系列函数 int?WSARecv(? SOCKET?s,? //?用来接收数据的套接字? LPWSABUF ?lpBuffers, //?指向WSABUF结构数组的指针,接收缓冲区 DWORD ?dwBufferCount, //?数组中成员的数量? LPDWORD? lpNumberOfBytesRecvd,? //?如果接收操作立即完成,此参数返回所接收到数据的字节数。? LPDWORD ?lpFlags,? //?标志位,设置为0?即可? LPWSAOVERLAPPED? lpOverlapped, //指向WSAOVERLAPPED结构指针,用来?绑定重叠结构? LPWSAOVERLAPPED_COMPLETION_ROUTINE ? lpCompletionRoutine? //?指向完成例程的指针,若选择事件通知的方式,应设置为?NULL? );? * 4.WSAWaitForMultipleEvents函数 DWORD?WSAWaitForMultipleEvents(? DWORD?cEvents, //?等候事件的总数量? const?WSAEVENT*?lphEvents, //事件数组的指针? BOOL?fWaitAll,?? //?如果设置为?TRUE,则事件数组中所有事件被传信时,函数才会返回?, //?如果设置为FALSE,则任何一个事件被传信时,函数就返回?,一般设置为FALSE。 DWORD?dwTimeout,? //?超时时间,如果超时,函数会返 回?WSA_WAIT_TIMEOUT?。 //?如果设置为0,函数会立即返回?。 //?如果设置为?WSA_INFINITE只有在某一个事件被传信后才会返回?。 BOOL?fAlertable?//?在完成例程方式中使用,选择事件通知应设置为FALSE? );? * 5.WSAGetOverlappedResult函数 BOOL?WSAGetOverlappedResult(? SOCKET? s,? LPWSAOVERLAPPED ?lpOverlapped,?? LPDWORD lpcbTransfer,?? BOOL ?fWait,? LPDWORD ?lpdwFlags? );? * 6.调用WSAWaitForMultipleEvents函数,等待重叠操作返回的结果 7.使用WSAResetEvent函数重设当前这个用完的事件对象 8.
您可能关注的文档
- 赢在未来-大数据时代的经营分析.ppt
- 结直肠肛管疾病_图文.ppt
- 营销服务商-微信-微信二次开发产品介绍.ppt
- 细胞分化与胚胎发育-课上演示版.ppt
- 革命性奥运人脸识别技术和金融安全.ppt
- 药用植物学与生药学教学资料 单子叶植物-禾本科-2015年广医上课.ppt
- 茵梦湖商业街氛围营造建议.ppt
- 广西师范大学漓江学院红十字会救助救护师培训活动交通伤特殊伤.ppt
- 工法编写的要求和技巧.ppt
- 表面活性剂应用基础.ppt
- 8 黄山奇石(第二课时)课件(共22张PPT).pptx
- 22《纸船和风筝》教学课件(共31张PPT).pptx
- 17 松鼠 课件(共23张PPT).pptx
- 23《海底世界》课件(共28张PPT).pptx
- 21《大自然的声音》课件(共18张PPT).pptx
- 第12课《词四首——江城子 密州出猎》课件 2025—2026学年统编版语文九年级下册.pptx
- 第2课《济南的冬天》课件(共42张PPT) 2024—2025学年统编版语文七年级上册.pptx
- 17 跳水 第二课时 课件(共18张PPT).pptx
- 第六单元课外古诗词诵读《过松源晨炊漆公、约客》课件 统编版语文七年级下册.pptx
- 统编版六年级语文上册 22《文言文二则》课件(共27张PPT).pptx
原创力文档


文档评论(0)