- 1、本文档共104页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络编程技术第8章-2
lpPerIOData-Buffer.len = MSGSIZE; lpPerIOData-Buffer.buf = lpPerIOData-szMessage; lpPerIOData-OperationType = RECV_POSTED; //异步的重叠I/O操作,未处理SOCKET_ERROR WSARecv(sClient, lpPerIOData-Buffer, 1, lpPerIOData-NumberOfBytesRecvd, lpPerIOData-Flags, lpPerIOData-overlap, NULL); } //结束的清理工作 PostQueuedCompletionStatus(CompletionPort, 0xFFFFFFFF, 0, NULL); //给子线程发信号 CloseHandle(CompletionPort); closesocket(sListen); WSACleanup(); return 0; } WORD WINAPI WorkerThread(LPVOID CompletionPortID) { //传进来的完成端口对象 HANDLE CompletionPort = (HANDLE)CompletionPortID; DWORD dwBytesTransferred; SOCKET sClient; LPPER_IO_OPERATION_DATA lpPerIOData = NULL; while (TRUE) { //取回完成端口的消息 GetQueuedCompletionStatus( CompletionPort, dwBytesTransferred, (DWORD*)sClient, (LPOVERLAPPED*)lpPerIOData, //小手段,将自定义数据结构强制转换为LPOVERLAPPED结构 INFINITE); if (dwBytesTransferred == 0xFFFFFFFF) { //收到主线程的结束标记 return 0; } if (lpPerIOData-OperationType == RECV_POSTED) { //判断操作 if (dwBytesTransferred == 0) { // 对方关闭套接字 closesocket(sClient); HeapFree(GetProcessHeap(), 0, lpPerIOData); } else { //原样发送回去 lpPerIOData-szMessage[dwBytesTransferred] = \0; send(sClient, lpPerIOData-szMessage, dwBytesTransferred, 0); memset(lpPerIOData, 0, sizeof(PER_IO_OPERATION_DATA)); lpPerIOData-Buffer.len = MSGSIZE; lpPerIOData-Buffer.buf = lpPerIOData-szMessage; lpPerIOData-OperationType = RECV_POSTED; WSARecv(sClient, //再次调用异步重叠I/O操作 lpPerIOData-Buffer, 1, lpPerIOData-NumberOfBytesRecvd, lpPerIOData-Flags, lpPerIOData-overlap, NULL); } } } return 0; } 几种winsock I/O模型的分析 ① select 模型: ??核心是select()函数,它可用于判断套接字上是否存在数据,或者能否向一个套接字写入数据。 该函数可以有效地防止应用程序在套接字处于阻塞模式时,send或recv进入阻塞状态;同时也可以防止在非阻塞模式产生大量的WSAEWOULDBLOCK错误。 优点:单线程管理多个套接字 缺点:调用select()前后都需要对所有套接字进行遍历操作。 ② WSAAsyncSelect 模型: ??? 以事件为基础使用消息机制,关键在于WSAAsyncSelect()函数,将socket消息发送到窗口上,然后在窗口过程函数中处理相应的FD_READ、FD_WRITE等网络事件。 优点: 1、WSAAsyncSelect和WSAEventSelect模型提供了读写数据能力的异步通知,但不提供数据的异步传输,而重叠及完成端口提供数据的异步传输。 2、可以在系统开销不
您可能关注的文档
- 综合实践《绳的妙用》活动方案马艳航.doc
- 综合序列分析件BioEdit 中文说明书.ppt
- 综合性学习:进信息世界.doc
- 综合科工作总及明年工作思路.doc
- 综合科学科教活动记录表.doc
- 统赢使用说明.doc
- 综采自动控制统简介.doc
- 综合训练项目务书(数据结构).doc
- 综掘机司机培教案.doc
- 综合监控安装理细则.doc
- 半导体材料性能提升技术突破与应用案例分析报告.docx
- 半导体设备国产化政策支持下的关键技术突破与应用前景报告.docx
- 剧本杀市场2025年区域扩张策略研究报告.docx
- 剧本杀行业2025人才培训体系构建中的市场需求与供给分析.docx
- 剧本杀行业2025年人才培训行业人才培养模式创新与探索.docx
- 剧本杀行业2025年内容创作人才需求报告.docx
- 剧本杀行业2025年区域市场区域剧本市场消费者满意度与市场竞争力研究报告.docx
- 剧本杀市场2025年区域竞争态势下的区域合作策略分析报告.docx
- 剧本杀行业2025人才培训与行业人才培养模式创新.docx
- 剧本杀行业剧本创作人才心理素质培养报告.docx
最近下载
- 珠心算家长会(金)课件.ppt VIP
- 税法(第5版)课件 曹越 第1--5章 税法基本原理、增值税--- 企业所得税.pptx
- 手外科疾病诊断与治疗.pptx VIP
- 2021乒乓球比赛活动设计方案.docx VIP
- 医疗器械分类目录2002版.doc VIP
- JBT10216-2013电缆桥架标准将代替JBT10216-2000旧标准.docx VIP
- 非遗知识文化云肩知识介绍PPT课件.pptx VIP
- 人行地通专项施工方案.doc VIP
- 阳江核电厂疏浚(清淤)项目环境影响报告书.docx VIP
- 2025广西公需科目考试答案(3套,涵盖95_试题)一区两地一园一通道建设;人工智能时代的机遇与挑战.pdf VIP
文档评论(0)