网站大量收购闲置独家精品文档,联系QQ:2885784924

第四讲WinsockIO方法.ppt

  1. 1、本文档共126页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四讲WinsockIO方法

基本概念 Windows是一种消息驱动的操作系统 Windows等待用户的动作(事件)以便作出反应, 所以也称为“事件驱动”的操作系统 什么是事件? eg:键盘输入某数据、点击file?save保存文件、点击 Exit按钮退出某程序….. 操作系统的每一部分与其他部分之间都可以通过消息进行通信 应用程序与操作系统之间的许多交互也通过消息完成 例如:针对某程序的键盘输入时, Windows系统向该程序发送输入消息, 该程序通过处理这个消息获得键盘输入的信息. 几个常用消息 单击鼠标左键产生消息 WM_LBUTTONDOWN 放开鼠标左键产生消息 WM_LBUTTONUP 单击鼠标右键产生消息 WM_RBUTTONDOWN 放开鼠标右键产生消息 WM_RBUTTONUP CreateWindows函数产生消息 WM_CREATE 关闭窗口产生消息 WM_CLOSE //0x0010 窗口、窗口句柄 一个windows应用程序,至少有一个窗口 利用窗口,windows应用程序可以和用户交互 例如:显示输出,接收输入…. 窗口、窗口句柄 Windows程序中,窗口通过 窗口句柄来标识 对窗口进行操作,必须得到该窗口的窗口句柄 Windows程序中的各种资源(窗口、光标、图标、画刷…)都有句柄,要操作必须获得句柄 句柄:一种标识号,系统在创建各种资源时,为它们分配内存,并返回标识这些资源的标识号 异步事件通知I/O模型 (WSAAsyncSelect模型) Select模型: 循环的去检查,看是否有数据 ... 接收/发送... 程序自己去看 WSAAsyncSelect模型: 别人(操作系统)来通知你 WSAAsyncSelect返回0;否则返回SOCKET_ERROR,这时可用WSAGetLastError来获取错误码.? 事实上,成功发送一次消息,通知机制会暂停工作直到有重新激活消息通知机制到来.才可重新激活事件. 水平触发:FD_READ,FD_OOB和FD_ACCEPT 即重新激活,需要引发消息发送的条件.? 边缘触发:FD_QOS,FD_GROUP_QOS等. void CXXXDlg::OnServerMsg(WPARAM wParam,LPARAM lParam) { ?????? SOCKET sock = (SOCKET) wParam; ?????? if(WSAGETSELECTERROR(lParam)){ ???????????? ErrorProcess(); ???????????? return; } switch(WSAGETSELECTEVENT(lParam)){ case FD_READ: ????????? ReadDate(sock);??? // 读数据并进行相应处理 ????????? break; case FD_CLOSE: ????????? Finsish(sock);??????? //套接口关闭工作 ????????? break; default; ????????? break; } } 其中函数会接受到两个参数wParam 和 lParam。 wParam参数指明网络事件套接口,多个套接口指定同一个用户消息,那么就需要根据wParam判断到底是哪个套接口待处理。 lParam参数包含两信息:低字指定发生网络事件,高字包含可能出现错误带代码。 在Windows sockets 应用程序中,当接收到网络事件消息时,在该函数内执行下面步骤 : (1) 读取lParam参数高字节,判断是否发生了一个网络错误事件。可以使用 WSAGETSELECTERROR宏。 (2) 如果应用程序发现套接字上没有发生任何错误,则读取Iparam低字节,检查到底是发生了什么网络事件。可以使用WSAGETSELECTEVENT宏。 WSAGETSELECTERROR和WSAGETSELECTEVENT宏声明如下: #define WSAGETSELECTEVENT(lParam) LOWORD(lParam) #define WSAGETSELECTERROR(lParam) HIWORD(lParam) WSAAsynSelect在MFC中使用流程 (1)使用#define语句定义套接口网络事件设置用户消息值,一般为WM_USER+N形式。 (2)调用WSAAsynsSelect函数,为套接口设定网络事件-用户消息-消息接收窗体的对应关系。 (3)在消息接收窗体的代码的消息映射模块中,加入ON_MESSAGE宏,设定用户消息的处理函数。 (4)编写用户处理函数,该函数应该首先使

文档评论(0)

haocen + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档