ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:214.15KB ,
资源ID:7621976      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7621976.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(WSAASYNCSELECTIO模型的程序设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

WSAASYNCSELECTIO模型的程序设计.docx

1、WSAASYNCSELECTIO模型的程序设计WSAASYNCSELECT-IO-模型的程序设计 WSAASYNCSELECT I/O 模型的程序设计一实验目的 通过本次实验,掌握winsock提供了WSAASYNselect异步I/O模型,利用这个模型,应用程序可在一个套接字上,接收以windows消息为基础的网络事件通知。二实验任务根据实验的要求完成,先画出实验程序的整体框架的流程图,明确步骤后。根据各步骤编写相应的程序,完成后,进行调试,修改,直至完成整个实验报告,最后撰写实验报告。三实验设计方案 在应用程序中,首先必须用C reateWindow函数创建一个窗口,再为该窗口提供一个窗口

2、例程支持函数(winproc)。应用程序在一个套接字上成功调用了WSAAsynselect之后,应用程序会在与hwnd窗口句柄参数对应的窗口例程中以windows消息形式,接受网络事件通知。窗口例程windowPro的Wparam参数指定在其上面发生了一个网络事件的套接字。1Param的低字(低位字)指定了已发生的网络事件,而1Param参数的高字(高位字)包含了可能出现的任何错误代码,可用两个特殊的宏去获取低位字,高位字的值。四算法,流程图及关键代码说明异步复用I/O模型的说明: WSAAsyncSelect是简单的一种Winsock I/O模型(之所以说它简单是因为一个主线程就搞定了)。这

3、里,我们需要做的是:1.在WM_CREATE消息处理函数中,初始化Windows Socket library,创建监听套接字,绑定,监听,并且调用WSAAsyncSelect函数表示我们关心在监听套接字上发生的FD_ACCEPT事件;2.自定义一个消息WM_SOCKET,一旦在我们所关心的套接字(监听套接字和客户端套接字)上发生了某个事件,系统就会调用WndProc并且message参数被设置为WM_SOCKET;3.在WM_SOCKET的消息处理函数中,分别对FD_ACCEPT、FD_READ和FD_CLOSE事件进行处理;4.在窗口销毁消息(WM_DESTROY)的处理函数中,我们关闭监

4、听套接字,清除Windows Socket library以下为各种I/O模型的介绍与WSAAsyncSelect模型原理图I/O模型WSAAsyncSelect模型原理图程序设计流程图:对流程图进行解析:首先,我们得用描述主窗口的参数填充WNDCLASSEX结构,注册窗口类,之后便是创建主窗口,将主窗口显示出来(出错与否),然后创建套接字,WSAAsyncSelect,绑定套接字到本地机器,指定监听的端口号,创建监听套接字,进入监听模式,最后消息循环,退出系统。代码及说明#include ./common/initsock.h#include #define WM_SOCKET WM_USE

5、R + 101 / 自定义消息CInitSock theSock;LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int main() char szClassName = MainWClass; WNDCLASSEX wndclass; / 用描述主窗口的参数填充WNDCLASSEX结构 wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc =

6、 WindowProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = NULL; wndclass.hIcon = :LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = :LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH):GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClas

7、sName = szClassName ; wndclass.hIconSm = NULL; :RegisterClassEx(&wndclass); / 创建主窗口 HWND hWnd = :CreateWindowEx( 0, szClassName, , WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, NULL); if(hWnd = NULL) :MessageBox(NULL, 创建窗口出错!, error, MB_OK); retur

8、n -1; USHORT nPort = 4567; / 此服务器监听的端口号 注:此处4567为编写时端口,调试时用42247,42503两个端口测试。 / 创建监听套节字 SOCKET sListen = :socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(nPort); sin.sin_addr.S_un.S_addr = INADDR_ANY; / 绑定套节字到本地机器 if(:bind(sListen, (sockaddr

9、*)&sin, sizeof(sin) = SOCKET_ERROR) printf( Failed bind() n); return -1; / 将套接字设为窗口通知消息类型。 :WSAAsyncSelect(sListen, hWnd, WM_SOCKET, FD_ACCEPT|FD_CLOSE); / 进入监听模式 :listen(sListen, 5); / 从消息队列中取出消息 MSG msg; while(:GetMessage(&msg, NULL, 0, 0) / 转化键盘消息 :TranslateMessage(&msg); / 将消息发送到相应的窗口函数 :Dispatc

10、hMessage(&msg); / 当GetMessage返回0时程序结束 return msg.wParam;LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) switch (uMsg) case WM_SOCKET: / 取得有事件发生的套节字句柄 SOCKET s = wParam; / 查看是否出错 if(WSAGETSELECTERROR(lParam) :closesocket(s); return 0; / 处理发生的事件 switch(WSAGETSELECTEVENT

11、(lParam) case FD_ACCEPT: / 监听中的套接字检测到有连接进入 SOCKET client = :accept(s, NULL, NULL); :WSAAsyncSelect(client, hWnd, WM_SOCKET, FD_READ|FD_WRITE|FD_CLOSE); break; case FD_WRITE: break; case FD_READ: char szText1024 = 0 ; if(:recv(s, szText, 1024, 0) = -1) :closesocket(s); else printf(接收数据:%s, szText); b

12、reak; case FD_CLOSE: :closesocket(s); break; return 0; case WM_DESTROY: :PostQuitMessage(0) ; return 0 ; / 将我们不处理的消息交给系统做默认处理 return :DefWindowProc(hWnd, uMsg, wParam, lParam); 五调试结果运行调试截图六改进意见与心得体会 通过此次实验,我们掌握了winsock提供了WSAASYNselect异步I/O模型,利用这个模型,应用程序可在一个套接字上,接收以windows消息为基础的网络事件通知。WASSsyncSelect模型的特点是将套接字绑定到窗口句柄,将网络事件与windows消息相关联。当套接字有网络事件发生时,将网络事件以windows消息的形式派发给绑定的窗口,然后在窗口函数windowProc中处理windows消息(即网络事件)。 本次实验中,我们通过一步步的实验,调试,发现问题,查找资料,发现错误,调试改进,直到最后完成整个实验,从实验中巩固学习到的知识,并将它适当运用,达成目标。在老师的细心指导下,与同学的配合联机调试下,此次实验,圆满完成,收益良多。 七主要参考资料 网络应用与开发P82 5.2.2 网络应用与开发实验指导书 实验4、5 第六讲 异步-网络通信中的I/O操作八教师评语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1