网站建设中 html5 模板下载推广引流的方法

web/2025/9/26 13:59:43/文章来源:
网站建设中 html5 模板下载,推广引流的方法,网站建设服务 百度,手机网站 app1.什么是IOCP IOCP#xff08;Input Output Completion Port#xff09;输入输出完成端口。其实就是基于重叠I/O的一种改进的模型。 重叠I/O具有缺点#xff1a;重复调用非阻塞模式的accpet函数和以进入alertablewait状态为目的的SleepEx函数会影响程序性能。 而IOCP提供…1.什么是IOCP IOCPInput Output Completion Port输入输出完成端口。其实就是基于重叠I/O的一种改进的模型。 重叠I/O具有缺点重复调用非阻塞模式的accpet函数和以进入alertablewait状态为目的的SleepEx函数会影响程序性能。 而IOCP提供的解决方案便是让主线程调用accept函数单独创建至少一个线程来负责所有I/O的前后处理。 但请不要过分关注在线程上主要还是如下问题         1.I/O是否以非阻塞模式工作         2.如何确定非阻塞模式的I/O是否完成 2.分阶段实现IOCP程序 2.1 实现原理 IOCP会将已完成的I/O信息注册到CP对象Completion Port完成端口而我们就可以通过CP对象来获取I/O是否完成的信息所以有下面两项工作 创建完成端口对象建立完成端口对象和套接字之间的联系  此时的套接字必须赋予重叠属性。 2.2 创建CP对象 #includewindows.hHANDLE CreateIoCompletionPort( HANDLE fileHandle, //创建CP对象时传递INVALID_HANDLE_VALUE HANDLE ExistingCompletionPort, //创建CP对象时传递NULL ULONG_PTR CompletionKey, //创建CP对象时传递0 DWORD NumberOfConcurrentThreads //分配给CP对象的用于处理I/O的线程数。//例如该参数为2时说明分配给CP对象的可以同时运行的线程数最多为2个//如果为0时那么系统中CPU的个数就是可同时运行的最大线程数 ); 成功返回CP对象句柄 失败返回NULL 2.3 创建和套接字连接完成的端口对象 #includewindows.hHANDLE CreateIoCompletionPort( HANDLE FileHandle, //要连接到CP对象的套接字句柄 HANDLE ExistingCompletionPort, //要连接套接字的CP对象句柄 ULONG_PTR CompletionKey, //传递已完成I/O相关信息 DWORD NumberOfConcurrentThreads //无论传递何值只要第二个参数非NULL就会被忽略 ); 成功返回CP对象句柄 失败返回NULL 函数功能将FileHandle句柄指向的套接字和ExistingCompletionPort指向的CP对象相连。 调用此函数后只要针对FileHandle的I/O完成相关信息就会注册到ExistingCompletionPort里。 注意第三个参数“传递已完成I/O相关信息”的意思是你可以像重叠I/O里使用Complition routine来确认I/O方式里把相关信息填写到hEvent里的那样写入其他信息这样当I/O完成就可以获取了。 2.4 确认完成端口已完成的I/O和线程I/O处理 #includewindows.hBOOL GetQueuedCompletionStatus( HANDLE CompletionPort, //注册有已完成I/O信息的CP对象句柄 LPDWORD lpNumberOfBytes, //保存I/O过程中传输的数据大小的变量地址值 PULONG_PTR lpCompletionKey, //保存CreateIoCompleytionPort函数第三个参数值得变量地址值 LPOVERLAPPED* lpOverlapped, //保存调用WSASend、WSARecv函数时传递的OVERLAPPED结构体地址的变量地址值 DWORD dwMilliseconds //超时信息超过该指定时间后将返回FALSE并跳出函数。//传递INFINITE时程序将阻塞直到已完成I/O信息写入CP对象 ); 成功返回TRUE 失败返回FALSE 注意 调用此函数的线程数量不能超过CreateIoCompletionPort时指定的线程数。此函数并不知道当前是输入信息状态还是输出信息状态需要自行判断。 3. 实现IOCP模型的回声服务器端 思路每连接一个客户端就创建一个线程然后主线程里先接收一次数据在子线程里通过GetQueuedCompletionStatus函数阻塞住线程判断I/O状态接着把接收的数据发送给客户端再次进入接收状态如此循环通信。 变量 struct ClientInfo结构体存有套接字和套接字地址族信息在CreateIoCompletionPort函数里建立套接字和CP的连接的时候当做第三参数传入 struct CPInfo结构体存有一个OVERLAPPED、WSABUF信息以及还有一个int型用来判断当前是RECV还是SEND在执行WSARecv函数时当做第六个参数进行传入。运用下面的知识点所以可以在子线程执行GetQueuedCompletionStatus函数时取得的第一个成员的地址也就是这整个结构体的地址。 知识点结构体变量地址值与结构体第一个成员的地址值相同。 struct CPInfo {OVERLAPPED overlapped;WSABUF wsabuf;int mode; //0:RECV 1:SEND }; CPInfo data; if(datadata.overlapped) {std::coutTRUEstd::endl; } else {std::coutFALSEstd::endl; } 输出TRUE #define _WINSOCK_DEPRECATED_NO_WARNINGS #includeiostream #includeWinSock2.h #includeprocess.h #includeWindows.h #includemalloc.h #includestringstruct ClientInfo {SOCKET socket;sockaddr_in socketAddr; };struct CPInfo {OVERLAPPED overlapped;WSABUF wsabuf;int mode; //0:RECV 1:SEND };unsigned WINAPI threadClient(void* arg);int main() {WSADATA wsaData;if (0 ! WSAStartup(MAKEWORD(2, 2), wsaData)){std::cout start up fail! std::endl;return 0;}SOCKET server WSASocket(PF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED);if (server INVALID_SOCKET){std::cout socket fail! std::endl;return 0;}int mode 1;ioctlsocket(server, FIONBIO, (u_long*)mode);sockaddr_in serverAddr;memset(serverAddr, 0, sizeof(serverAddr));serverAddr.sin_family AF_INET;serverAddr.sin_addr.s_addr htonl(INADDR_ANY);serverAddr.sin_port htons(9130);if (SOCKET_ERROR bind(server, (sockaddr*)serverAddr, sizeof(serverAddr))){std::cout bind fail! std::endl;return 0;}if (SOCKET_ERROR listen(server, 2)){std::cout listen fail! std::endl;return 0;}while (true){sockaddr_in clientAddr;memset(clientAddr, 0, sizeof(clientAddr));int clientAddrLen sizeof(clientAddr);SOCKET client accept(server, (sockaddr*)clientAddr, clientAddrLen);if (client SOCKET_ERROR){if (WSAGetLastError() WSAEWOULDBLOCK) //说明此时没有客户端连接{continue;}std::cout accept fail! std::endl;}else{HANDLE cpObject CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);if (cpObject NULL){std::cout Create CP fail! std::endl;continue;}ClientInfo* clientinfo new ClientInfo();clientinfo-socket client;clientinfo-socketAddr clientAddr;CreateIoCompletionPort((HANDLE)client, cpObject, (ULONG_PTR)clientinfo, 0);unsigned threadId;if (0 _beginthreadex(NULL, 0, threadClient, (void*)cpObject, 0, threadId)) //创建一个线程{std::cout thread create fail! std::endl;continue;}CPInfo* cpinfo new CPInfo();cpinfo-mode 0;memset(cpinfo-overlapped, 0, sizeof(cpinfo-overlapped));char buff[1024];cpinfo-wsabuf.buf buff;cpinfo-wsabuf.len sizeof(buff);DWORD readLen;DWORD flag 0;WSARecv(client, cpinfo-wsabuf, 1, readLen, flag, cpinfo-overlapped, NULL);}}closesocket(server);WSACleanup(); }unsigned WINAPI threadClient(void* arg) {HANDLE cpObject *(HANDLE*)arg;CPInfo* cpinfo;ClientInfo* clientinfo;while (true){DWORD readLen;GetQueuedCompletionStatus(cpObject, readLen, (PULONG_PTR)clientinfo, (LPOVERLAPPED*)cpinfo, INFINITE);if (readLen 0){std::cout 客户端: inet_ntoa(clientinfo-socketAddr.sin_addr) 断开连接! std::endl;break;}if (cpinfo-mode 0) //recv{std::cout 客户端发来的消息: cpinfo-wsabuf.buf std::endl;DWORD flag 0;cpinfo-mode 1;WSASend(clientinfo-socket, cpinfo-wsabuf, 1, readLen, flag, cpinfo-overlapped, NULL);CPInfo* cpinfo2 new CPInfo();cpinfo2-mode 0;memset(cpinfo2-overlapped, 0, sizeof(cpinfo2-overlapped));char buff[1024];cpinfo2-wsabuf.buf buff;cpinfo2-wsabuf.len sizeof(buff);DWORD readLen2;WSARecv(clientinfo-socket, cpinfo2-wsabuf, 1, readLen2, flag, cpinfo2-overlapped, NULL);}else //send{delete cpinfo;}}CloseHandle(cpObject);closesocket(clientinfo-socket);return 0; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛阳有哪些做网站的公司wordpress只显示置顶文章

第十二届蓝桥杯省赛Java B组真题 编程题 1. 杨辉三角问题描述 2. 时间显示问题描述 3. 双向排序问题描述 4. 括号序列问题描述分析 5.砝码称重分析 1. 杨辉三角 问题描述 著名的杨辉三角形,按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数…

音箱厂家东莞网站建设专做农产品跨境的网站有

很久没有发帖了,很是惭愧,因此给各位使用EXT.NET的朋友献上一份礼物。 本篇主要讲述页面设计与效果,下篇将讲述编码并提供源码下载。 系统首页设计往往是个难点,因为往往要考虑以下因素: 重要通知系统功能菜单快捷操作…

北京中小企业网站建设外贸服装商城网站建设

昨天在班里测试了下,检测他们数据库学的怎么样,看他们平时在课堂上的互动挺棒。看了下题,不是很难,满怀着愉悦的心情去打印了50份,挨个分发下去,由于我18级那边有课要上,所以这边的考试就辛苦王…

WordPress里面自定义功能优化就是开除吗

1、命令的基本格式 对服务器来讲,图形界面会占用更多的系统资源,而且会安装更多的服务、开放更多的端口,这对服务器的稳定性和安全性都有负面影响。其实,服务器是一个连显示器都没有的家伙,要图形界面干什么&#xff…

怎么设置自己的网站安徽优化网站

19级青鸟3班 刘文瑞以前因为经常玩游戏的原因,导致我对软件特别感兴趣,但是由于学习到的东西不多,经常是在玩游戏,真正能运用到计算机上的知识实在是少的可伶。像是代码之类的东西,以前只是听说过,但是一点…

合肥高端网站建设cnfg冰雪复古传奇手游官网

四、音乐播放器 任务要求: 设计制作一个简易音乐播放器(通过手柄板上的蜂鸣器发声,播放2到4首音 乐),同时LED模块闪烁,给人视、听觉美的感受。 评分细则: 按下播放按键P15开始播放音乐&#x…

源码制作网站广州白云区最新新闻

priority_queue模拟实现 1. priority_queue介绍2. priority_queue使用2.1 priority_queue显示定义2.2priority_queue接口使用 3. 仿函数4. priority_queue模拟实现4.1 向上调整算法4.2 向下调整算法4.3 实现priority_queue的接口4.4 使用[仿函数](https://legacy.cplusplus.com…

营销软件站放单网站

Glance是为虚拟机的创建提供镜像的服务,我们基于Openstack是构建基本的IaaS平台对外提供虚拟机,而虚拟机在创建时必须为选择需要安装的操作系统,Glance服务就是为该选择提供不同的操作系统镜像。Glance提供Restful API可以查询虚拟机镜像的me…

保定模板建站平台如何去除痘痘有效果

cognito在本文中,我们将研究使用OAuth协议通过Amazon Cognito对单页应用程序(使用Vue.js构建)进行身份验证。 在上一篇文章中,我们将服务器端应用程序与Amazon Cognito集成在一起。 搭建单页应用程序 我们将使用vue-cli创建一个空…

专做健身餐的网站wordpress 说说碎语

每日OJ —— 144. 二叉树的前序遍历 1.题目:144. 二叉树的前序遍历2.方法讲解2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目:144. 二叉树的前序遍历 2.方法讲解 2.1.算法讲解 1.首先如果在每次每个节点遍历的时候都去为数组开辟空间,这样…

网站建设从哪入手免费word在线编辑

一、创建vue项目步骤 要创建一个Vue Element UI的项目,你可以按照以下步骤进行操作: 1.确保你已经安装了Node.js和npm(Node.js的包管理器)。你可以在命令行中运行以下命令来检查它们是否已经安装: node -vnpm -v2.使…

中国十大网站排名wordpress is admin

目标 我们学习正则化之前应该先了解我们为什么要用正则化 。正则化解决了什么问题 。我们讲正则化之前 ,先了解一个概念–》过拟合 过拟合 数据增强 L1和L2正则化 Dropout 注意:Dropout是不适合用在卷积神经网络的 提前终止 一般的做法是:记…

网站技术可行性网站怎么做数据转移

北京电子科技学院(BESTI) 实 验 报 告 封 面 课程:信息安全系统设计基础 班级:1452 姓名: 黄亚奇 祁玮 学号: 20145222 20145213 成绩: 指导教师:娄嘉鹏 实验日期:2016.1…

做的好的农产品网站微企点做的网站怎么去底下的

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

微信网站是多少钱一年wordpress书签插件

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 【翻译】再见, Clean Code!正文那是一个深夜次日早晨这只是一个阶段 【翻译】再见…

天津外贸营销型网站建设怎样做酒店网站ppt

作者:fyupeng 技术专栏:☞ https://github.com/fyupeng 项目地址:☞ https://github.com/fyupeng/distributed-blog-system-api 留给读者 一、介绍 当由于某个业务id发生死循环一直在运行,那么再来一笔相同的业务id执行相同操作&…

汇款账号 网站建设如何让百度收录网站

记录一下成长的历程吧! 刚开始写,没什么文笔,也没什么技术含量,可能主要的是纪录一下平常工作学习中遇到的问题,以及解决的办法吧。或者只有问题,没有解决办法。 前两天项目中遇到的一个问题,由…

广州网站优化服务商整站seo优化推广

引入;发送文件前要准备的工作 分层的基本原则 分层结构中相关的概念 PCISDUPDU 上一层的PDU作为传给下一层的SDU,传输下去 总结

网站建设商城模板培训班设计

作者:Martin Fowler译者:冬哥原文:https://martinfowler.com/articles/remote-or-co-located.html远程工作与同地工作之间不是简单的二分法,相反,团队有多种分布模式,每种模式都有不同的权衡和适合的有效技…

手机参数查询网站宁波网站优化价格

【问题分析】实际工作中,我们经常需要进行统计分析,如统计甘肃省各个地区界内的河流、公路、铁路等的总长度,统计各个地区界内总人口、作物产量、村镇分布等等。ArcGIS提供了强大的空间统计功能,可以一次性操作完成所有操作,省时省力,大大提高了工作效率,减少了错误的发…