

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、网络编程笔记 -WSAAsyncSelect模型-herocao的博客Winsock提供了一个有用的异步I / O模型。利用这个模 型,应用程序可在一个套接字上,接收以Windows消息为基础的网络事件通知。具体的做法 是在建好一个套接字后,调用WSAAsyncSelect函数。 此模型提供了读写数据能力的异步 通知,但不提供异步数据传送。 异步数据传送有“重叠及完成 端口模型提供”。消息通知要想使用WSAAsyncSelect模型, 在应用程序中, 首先必须 用CreateWindow函数创建一个窗口,再为该窗口提供一个 窗口例程支持函数(Winproc)。亦可使用一个对话框,为 其提供一个
2、对话例程,而非窗口例程,因为对话框本质也是 “窗口”。int WSAAsyncSelect (SOCKET s,/要进行操作的SOCKET(3)响应窗口的自定义消息处理函数,其中lparam的高位HWND hWnd, /要绑写的窗口句柄(当事件发生后要 接收消息的窗口)unsigned int wMsg, /网络事件发生时的的消息响应longlEvent /感兴趣的网络事件,请查阅MSDN);使用方法可分为:(1)初始化套接字相关信息:(2)开始启动一个事件通知。WSAAsyncSelect(Sock, hWnd,自定义消息,网络事件)字包含了可能出现的错误 代码,低字节表示发生的网络事件。w
3、Param表示发生网络 事件的套接字。WSAGETSELECTERROR(lParam);/查看是否出现错误,获取低字节位WSAGETSELECTEVENT(lParam);/查看发生了什么事件,获取高字节位事件种类请查看MSDN,可用WSAGetLastError()来获取错 误息。注意:多个事件必须一次注册完成,一旦在某个套接字上启 用了事件通知,注册过的事件将一直有效,除非明确调用closesocket命令,或针对这个套接字再调用WSAAsyncSelect更改注册过的网络事件。优点:可在系统开销不大的情况下同时处理许多连接。缺点:即使用不需要窗口(如服务器,控制台)它也不得不 额外使用
4、一个窗口。同时如果处理成千上万套接字的所有事 件,性能可想而知。MFC的CSocket所使用的正是这种事件通知模型 今天看了一下,消息通知的几个类型。用的比较多的可能就 是FD_SEND,FD_WRITE,在网上查了一下资料, 总结如下:【FD_WRITE事件】(1)呼叫WSAAsyncSelect()来设定FD_WRITE事件时,Socket已经可以传送资料 (TCP scoket已经和对方连接成 功了,或UDP socket已建立完成) ,且目前output buffer仍有空间可写入资料。(2)呼叫WSAAsyncSelect()来设定FD_WRITE事件时,Socket尚不能传送资料,
5、不过一旦Socket与对方连接成 功,马上就会收到FD_WRITE的通知。(3)呼叫send()或sendto()传送资料时, 系统告知错误, 且错误码为10035 WSAEWOULDBLOCK(呼叫WSAGetLastError()得知这项错误) ,这时表示output buffer已经满了,无法再写入任何资料(此时即令呼叫再多 次的send()也都一定失败) ;一旦系统将部份资料成功送抵 对方,空出output buffer后,便会送一个FD_WRITE给 使用者,告知可继续传送资料了。换句话说,读者在呼叫send()传送资料时,只要不是返回错误10035的话,便可 一直继续呼叫send(
6、)来传送资料;一旦send()回返错误10035,那麽便不要再呼叫send()传送资料,而须等收到FD_WRITE后,再继续传送资料。如果只是发送很少的数据,可能只出现第二种情况,所以在 发送少量数据的时候,不要使用FD_WRITE机制。【FD_READ事件】(1)呼叫WSAAsyncSelect函式来对此Socket设定FD_READ事件时,input buffer中已有资料。(2)原先系统的input buffer是空的,当系统再收到资料 时,会通知我们。(3)使用者呼叫recv或recvfrom函式,从input buffer读 取资料,但是并没有一次将资料读光,此时会再驱动一个FD_R
7、EAD事件,表示仍有资料在input buffer中。读者必须注意: 如果我们收到FD_READ事件通知的 讯息,但是我们故意不呼叫recv或recvfrom来读取资料 的话,尔後系统又收到资料时, 并不会再次通知我们, 一定 要等我们呼叫了recv或recvfrom後,才有可能再收到FD_READ的事件通知。面是一个利用WSAAsyncSelect的小程序:WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 2, 2 );err = WSAStartup( wVersionRequested
8、,&wsaData );if ( err != 0 )return;if ( LOBYTE( wsaData.wVersion ) != 2 |HIBYTE( wsaData.wVersion ) != 2 )WSACleanup( );return;span lang=EN-US style=LINE-HEIGHT: 150%; FONT-FAMILY:宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt;mso-bidi-font-family: AdobeSongStd-Light-Acro> charh
9、ostname256; gethostname(hostname,sizeof(hostname);/这一代码是为HOSTENT*hos=gethostbyname(hostname);/了实现自动获取安CString CS=inet_ntoa(*(structin_addr*)hos->h_addr_list0);/装程序的主机代码SOCKET serverSocket;serverSocket = socket(AF_INET, SOCK_STREAM, 0);SOCKADDR_IN addr;addr.sin_family = AF_INET;addr.sin_port =
10、 htons(6000);addr.sin_addr.S_un.S_addr = inet_addr(CS);bind(serverSocket, (SOCKADDR*)&addr,sizeof(SOCKADDR);/注册网络事件if(SOCKET_ERROR =WSAAsyncSelect(serverSocket, m_hWnd, WM_NETMESSAGE,FD_ACCEPT|FD_CLOSE)MessageBox(注册事件出错!);closesocket(serverSocket);WSACleanup();return;listen(serverSocket, 5);
11、void CAsyselectsrvDlg:Onrecvmessage(WPARAM wParam,LPARAM lParam)if(WSAGETSELECTERROR(lParam)AfxMessageBox(接受消息错误);closesocket(wParam);return;switch(WSAGETSELECTEVENT(lParam)case FD_ACCEPT:acceptclient(wParam, m_hWnd);break;case FD_WRITE:MessageBox(write);break;case FD_READ:MessageBox(read);break;cas
12、e FD_CLOSE:closesocket(wParam);break;default:break;return;void acceptclient(SOCKET sock, HWND hwnd)SOCKET acceptclient;SOCKADDR_IN clientaddr;int len = sizeof(SOCKADDR_IN);acceptclient = accept(sock, (structsockaddr*)&clientaddr, &len);if(SOCKET_ERROR =WSAAsyncSelect(acceptclient, hwnd,WM_NETM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 扬帆起航梦想启程
- 2023四年级数学下册 七 三角形、平行四边形和梯形第4课时 三角形按角分类教学设计 苏教版
- 认证体系业务培训
- 《8 包饺子》(教学设计)-2023-2024学年四年级上册综合实践活动皖教版
- 七年级英语下册 Module 5 Shopping Unit 1 What can I do for you第2课时教学设计(新版)外研版
- 2024-2025学年高中生物 第4章 第2节 基因对性状的控制教学设计 新人教版必修2
- 过敏性休克的护理措施
- 2024-2025学年高中语文 第六课 语言的艺术 2 第二节 语言表达的十八般武艺-修辞手法教学设计 新人教版选修《语言文字应用》
- Unit7 Integrated Skills教学设计2023-2024学年牛津译林版英语七年级下册
- 2023三年级英语上册 Unit 2 Friends and Colours Lesson 10 Red,Yellow,Blue,Green教学设计 冀教版(三起)
- GB/T 13441.4-2012机械振动与冲击人体暴露于全身振动的评价第4部分:振动和旋转运动对固定导轨运输系统中的乘客及乘务员舒适影响的评价指南
- 教科版科学五年级下册全册全套课件【最新版】
- 云南省文山壮族苗族自治州各县区乡镇行政村村庄村名居民村民委员会明细
- 中绿的制度课
- 质量目标管理表
- 机械原理课程设计-抽油机机械系统设计说明书
- 医疗护理品管圈QCC成果汇报之提高住院病人健康宣教的知晓率(问题解决型)
- DBJ41T 074-2013 高压细水雾灭火系统设计、施工及验收规范
- Q∕SY 05262-2019 机械清管器技术条件
- DBJ51 014-2021 四川省建筑地基基础检测技术规程
- 环境监测课件:第3章 空气和废气监测2
评论
0/150
提交评论