Windows IO模型-WSAAsynSelect模型(异步阻塞模型)
来源:互联网 发布:外汇高盛软件 编辑:程序博客网 时间:2024/05/20 10:21
WSAAsyncSelect-异步选择模型()
异步选择(WSAAsyncSelect)模型:属于被动通知,基于消息机制,需要向Windows注册消息,当对应的网络事件发生时,向指定窗口发送指定消息。
缺点:(1)消息不安全,而且会慢,消息的过程比较复杂。(2)基于窗口,必须要有窗口,所以平台有限制。
1、向windows注册网络事件
█ WSAAsyncSelect的函数原型如下:
int WSAAsyncSelect(
__in SOCKET s, //注册的socket
__in HWND hWnd, //网络事件发生以后,想要收到通知消息的窗口
__in unsigned int wMsg, //自定义的消息UM_MSG。
__in long lEvent //指定一个位掩码,对应于一系列网络事件的组合
);
网络事件lEvent参数:
FD_READ 应用程序想要接收有关是否可读的通知,以便读入数据
FD_WRITE 应用程序想要接收有关是否可写的通知,以便写入数据
FD_ACCEPT 应用程序想接收与进入连接有关的通知
FD_CONNECT 应用程序想接收与一次连接完成的通知
FD_CLOSE 应用程序想接收与套接字关闭的通知
2、MFC中创建专门用来接收消息的窗口,
2.1、添加父类为CFramWnd的类CMyWnd
BOOL CWnd::Create(LPCTSTR lpszClassName, //注册窗口类,通过注册得到的
LPCTSTR lpszWindowName, // 窗口标题
DWORD dwStyle, //窗口风格
const RECT& rect, //窗口矩形
CWnd* pParentWnd, UINT nID,
CCreateContext* pContext)
BOOL CFrameWnd::Create(LPCTSTR lpszClassName, //窗口的类名,通过注册得到的
LPCTSTR lpszWindowName, //窗口标题
DWORD dwStyle= WS_OVERLAPPEDWINDOW, //窗口风格
const RECT& rect = rectDefault, //窗口矩形
CWnd* pParentWnd = NULL,
LPCTSTR lpszMenuName = NULL,
CCreateContext* pContext = NULL)
2.2、CMyWnd类中添加消息:
消息定义:LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
消息映射:ON_MESSAGE(UM_MSG,&CMyWnd::OnMyMessage);
消息实现:LRESULT CMyWnd::OnMyMessage(WPARAM wParam, LPARAM lParam);
wParam 存放有事件发生的socket,lParam:存放发生网络事件的类型
2.2、在CMyWnd中使用单例模式,即在注册网络事件的类中不需要定义对象,在cpp中调用静态接口函数即可
CMyWnd::GetMyWnd()->Create(NULL,”Mywnd”);
获取窗口句柄:m_myWnd.m_hWnd =》GetMyWnd()->m_hWnd.
2.3、CMyWnd将消息处理函数传进来的参数,socket和网络事件类型直接转发给网络注册所在类中,
- Windows IO模型-WSAAsynSelect模型(异步阻塞模型)
- Windows IO模型-WSAEventSelect模型(异步阻塞模型)
- winsock IO模型WSAAsynSelect
- WSAAsynSelect模型
- WSAAsynSelect模型
- WSAAsynSelect模型
- Windows IO模型-Select模型(同步阻塞模型)
- 套接字IO模型(二) WSAAsynSelect模型
- (转)套接字IO模型(二) WSAAsynSelect模型
- 套接字IO模型(二) WSAAsynSelect模型
- IO模型:同步、异步、阻塞、非阻塞
- 网络IO模型(同步异步,阻塞非阻塞)
- IO模型(同步,异步,阻塞,非阻塞)
- Wsaasynselect模型使用心得
- IO模型之阻塞、非阻塞、IO多路复用、异步
- socket阻塞/非阻塞,同步/异步,io模型
- IO模型:同步与异步,阻塞与非阻塞
- 【IO模型探讨】阻塞,非阻塞,同步,异步
- c++基础之链表
- HDU 6183 线段树新玩法 + 离散化
- POJ3376 (Finding Palindromes) Trie+扩展KMP
- Bootstrap插件(一)——模态框(modal.js)
- Java NIO的特点
- Windows IO模型-WSAAsynSelect模型(异步阻塞模型)
- 面向对象六大原则之单一职责原则
- 目前看到的最棒的HashMap源码分析(基于java 8)--Java 8系列之重新认识HashMap
- ES6 Symbol及对象遍历方法for in,Object,keys,JSON.stringify,getOwnPropertyNames,Reflect.ownKeys
- 关于java中的double check lock
- 零基础简单爬虫制作(以wjyt-china企业黄页爬虫为例)(上)
- HTML基础01
- 通过modbus协议实现arduino与电能表串口通信
- 从头开始学算法:考研机试题练习(C/C++)–STL使用