网络程序设计-复习.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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.

文档评论(0)

189****6821 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档