WSAAsyncSelect 模型】的更多相关文章

==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性. 未经作者同意请勿修改(包括本声明),保留法律追究的权利. 未经作者同意请勿用于出版.印刷或学术引用. 本文不定期修正完善,为保证内容正确,建议移步原文处阅读. 本文链接:http://www.cnblogs.com/wlsandwho/p/4228894.html =============…
============================================== █ 异步选择(WSAAsyncSelect)模型是一个有用的异步 I/O 模型.利用这个模型,应用程序可在一个套接字上, 接收以 Windows 消息为基础的网络事件通知.具体的做法是在建好一个套接字后,调用WSAAsyncSelect函数. 该模型的核心即是WSAAsyncSelect函数. █ 要想使用 WSAAsyncSelect 模型,在应用程序中,首先必须用CreateWindow函数创建一个…
winsock编程WSAAsyncSelect模型 WSAAsyncSelect模型也称异步选择模型,其核心函数是WSAAsyncSelect.它可以用来在一个socket上接收以windows消息为基础的网络事件.它提供了读写数据的异步通知功能,但不提供异步数据传送.WSAAsyncSelect模型的优势在于只需要一个主线程即可.缺点是必须要绑定窗口句柄. 1:WSAAsyncSelect函数定义 Description:The WSAAsyncSelect function requests…
原帖链接: http://bbs.csdn.net/topics/330164174 楼主: Server用WSAAsyncSelect模型,Client关闭程序时(不进行shutdown与closesocket),server收不到FD_Close消息,怎么才会自动收到这个消息呢? 2楼: 对方不shutdown或closesocket,你怎么可能及时响应FD_CLOSE消息,开启keepalive 3楼: 保证能及时知道客户端非正常关闭(无法及时响应FD_CLOSE),可以加入心跳包. 正常…
WSAAsyncSelect模型是winsock编程模型的一种,它提供了socket异步编程的方便,其实现是基于Windows消息机制的,最主要的就是下面这个函数: int PASCAL FAR WSAAsyncSelect (SOCKET s,HWND hWnd,unsigned int wMsg,long lEvent); s 标识一个需要事件通知的套接口的描述符.hWnd 标识一个在网络事件发生时需要接收消息的窗口句柄.wMsg 在网络事件发生时要接收的消息.lEvent位屏蔽码,用于指明…
任务目标 编写Win32程序模拟实现基于WSAAsyncSelect模型的两台计算机之间的通信,要求编程实现服务器端与客户端之间双向数据传递.客户端向服务器端发送"请输出从1到1000内所有的质数",服务器回应客户端给出结果. 效果图 核心代码 服务器端: #include <stdio.h> #include <winsock2.h> #pragma comment(lib, "WS2_32") // 链接到WS2_32.lib #incl…
通过WSAAsyncSelect()可以设置非阻塞异步套接字 ::WSAAsyncSelect(s, hDlg, WM_SOCKET, FD_CONNECT | FD_CLOSE | FD_WRITE | FD_READ); 然而设置WSAAsyncSelect()后,进行connect()与服务端连接: if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -1) { MessageBox(NULL, L"connect(…
1.基于windows消息为基础的网络事件io模型.因此我们必须要在窗口程序中使用该模型.该模型中的核心是调用WSAAsyncSelect函数实现异步I/O. 2.WSAAsyncSelect函数:注册网络事件函数int WSAAsyncSelect(    SOCKET s,//    HWND hWnd,//    unsigned int wMsg,//注意,该消息值应该大于WM_USER(1024)    long lEvent,//网络事件    );若应用程序针对一个套接字调用了WS…
::WSAAsyncSelect(sListen, hWnd, WM_SOCKET, FD_ACCEPT|FD_CLOSE); 自定义 WM_SOCKET消息 #include "../common/initsock.h" #include <stdio.h> #define WM_SOCKET WM_USER + 101 // 自定义消息 CInitSock theSock; LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg…
当一个套接字连接被建立上时(包括客户端的connect(),connectex()等和服务器端的accept接收到后创建的新套接字),这时会触发FD_WRITE,以后就可以用send(),WSASend()发送数据了.如果以后发送正常的话,将不会再触发FD_WRITE. 如果发送数据不正常的话,即用send(),WSASend()等发数据,WSAGetLastError()返回WSAEWOULDBLOCK错误,那么等到系统缓冲可再发送数据时,就会触发FD_WRITE.…