河南建设工程质量监督局网站网站建设怎么找客源?

bicheng/2026/1/16 6:46:32/文章来源:
河南建设工程质量监督局网站,网站建设怎么找客源?,深圳全胜专业网站建设,如何做com的网站一.I/O多路复用 I/O多路复用是一种用于提高系统性能的 I/O 处理机制。 它允许一个进程#xff08;或线程#xff09;同时监视多个文件描述符#xff08;可以是套接字、管道、终端设备等#xff09;#xff0c;等待这些文件描述符中出现读、写或异常状态。一旦有满足条件的…一.I/O多路复用 I/O多路复用是一种用于提高系统性能的 I/O 处理机制。 它允许一个进程或线程同时监视多个文件描述符可以是套接字、管道、终端设备等等待这些文件描述符中出现读、写或异常状态。一旦有满足条件的文件描述符状态发生变化进程或线程就能立即得到通知并进行相应的 I/O 操作处理。 在socket编程阶段,未接触IO多路复用前服务器需要阻塞在accept函数上直到等待客户端通过connect发起连接请求才执行接下来的逻辑。 而使用IO多路复用可以先监听是否有客户端的连接操作再执行accept从而不再使服务器阻塞在accept上。还可监视客户端的读写交互操作以及异常操作执行对应逻辑。 二.select 1.功能 select去监听客户端连接(lfd)当有客户端进行连接时 它会让server去调用accept(当有连接时才去立即调用而不是一直阻塞等待)accept返回一个用于通信的cfd将其加入select监听集合使其监管着lfd(监听socket)和所有cfd(通信socket)。 2.函数解析 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeva l *timeout); 加以解释 select(监听最大文件描述符1读监听fd集合写监听fd集合异常监听fd集合等待时长) // ● nfds监听的所有文件描述符中最大文件描述符1 ● readfdsfd_set类型读 文件描述符监听集合。传入传出参数传入的fd会被监听传出时返回实际发生事件的fd未发生对应事件的被剔除。 ● writefdsfd_set类型写 文件描述符监听集合。传入传出参数传入传出同上通常传NULL ● exceptfdsfd_set类型异常 文件描述符监听集合。传入传出参数传入传出同上通常传NULL ● timeout大于0表示设置监听时长NULL表示阻塞监听0表示非阻塞监听 while轮询 // 返回值: ● 大于0所有监听集合(读、写、异常)中满足对应事件的总数 ● 0没有满足监听条件的文件描述符 ● -1error // fd_set:本质是位图通过对应操作加入删除查询文件描述符 监听集合对应函数 void FD_ZERO(fd_set *set); –清空一个文件描述符集合 fd_set rset FD_ZERO(rset) //将rset集合清空void FD_SET(int fd, fd_set *set); –将待监听的文件描述符添加到监听集合中 FD_SET(3,rset)FD_SET(5,rset) //将文件描述符3和5加到rset集合中void FD_CLR(int fd, fd_set *set); –将一个文件描述符从监听集合中移除int FD_ISSET(int fd, fd_set *set); –判断一个文件描述符是否在该集合中存在返回1不存在返回0 3.select函数和fd_set底层原理 文件描述符表前三个默认被系统占用 fd_set集合传入的是文件描述符传出所有监听集合(读、写、异常)中满足对应事件的总数 fd_set集合的本质位图(二进制位存放文件描述符的状态)默认都为0若发生变化就置1 4.select实现IO多路复用服务器思路及代码实现、 思路 代码实现: #include stdio.h #include ctype.h #include sys/types.h #include sys/socket.h #include arpa/inet.h #include stdlib.h #include string.h #include unistd.h #include errno.h #include sys/time.h #include sys/select.h#define SERVE_PORT 9527int main() {int lfd, cfd, ret, len, j, i;char buf[BUFSIZ];//地址结构体struct sockaddr_in serve_addr, client_addr;socklen_t client_addr_len;bzero(serve_addr,sizeof(serve_addr)); //结构体清空serve_addr.sin_family AF_INET;serve_addr.sin_port htons(SERVE_PORT);serve_addr.sin_addr.s_addr htonl(INADDR_ANY);//创建socketlfd socket(AF_INET,SOCK_STREAM,0);int maxfd lfd; //最大的文件描述符if(lfd-1){perror(socket error);exit(1);}//绑定ip和端口bind(lfd,(struct sockaddr *)serve_addr,sizeof(serve_addr));//设置上限listen(lfd,128);fd_set rset, allset; //设置监听的集合FD_ZERO(allset); //清空集合FD_SET(lfd,allset); //将lfd加入到监听集合while(1){rset allset;ret select(maxfd1,rset,NULL,NULL,NULL); if(ret0){perror(select error);exit(1);}if(FD_ISSET(lfd,rset)) //如果lfd在传出的rset中表示有客户端要进行连接{client_addr_len sizeof(client_addr);cfd accept(lfd,(struct sockaddr *)client_addr,client_addr_len);FD_SET(cfd,allset); //将cfd加入到监听集合if(maxfdcfd)maxfd cfd; //更新最大的文件描述符//说明select只返回了lfd这一个后续指令无需执行,continue跳出本次继续whileif(ret1) continue;}//如果ret!1 说明还监听到了其他描述符的read事件for(ilfd1; imaxfd; i){if(FD_ISSET(i,rset)){ //找到满足读事件的那个描述符len read(i,buf,sizeof(buf));if(len0) //检测到客户端关闭了连接{close(i); //关闭该描述符FD_CLR(i,allset); //将该描述符从监听集合中移除}//如果len不为0就表示有数据循环更改数据for(j0; jlen; j)buf[j] toupper(buf[j]);//写回更改后的数据write(i,buf,len);write(STDOUT_FILENO,buf,len);}}}close(lfd); return 0; }关于rset和allset的解析 因为select函数返回出来的是满足条件的如果我们将新的cfd也加入到rset中那么等到下次循环时如果刚刚加入的cfd没有读写数据发生时就会被踢出rset此时我们需要用allset来存储新进来的cfd每次进while循环后就赋值给rset 三.poll 相对select没有太大改进属于半成品了解即可 1.函数解析 int poll(struct pollfd *fds, nfds_t nfds, int timeout); 参数解释 struct pollfd* fds: 监听文件数组包括描述符fd监听事件events(读POLLIN,POLLOUT,POLLERR写异常)返回事件revents(读写异常) nfds_t nfds:实际监听的文件描述符最大个数 int timeout: 等待时间 大于0 : 设置超时时长 -1 阻塞等待 0不阻塞等待 返回值返回 监听到实际发生动作的描述符总数量 2.对比select的优化 ①自带结构体数组(不必再使用FD_SET位图表示读写异常监听集合而是在结构体内部利用POLL_IN等宏表示)。 ②可以将监听事件集合和返回事件集合 分离。 ③拓展 监听上限 超出文件描述符最大1024的限制。 3.poll实现的多路io复用服务器 1./* server.c */ 2.#include stdio.h 3.#include stdlib.h 4.#include string.h 5.#include netinet/in.h 6.#include arpa/inet.h 7.#include poll.h 8.#include errno.h 9.#include wrap.h 10. 11.#define MAXLINE 80 12.#define SERV_PORT 6666 13.#define OPEN_MAX 1024 14. 15.int main(int argc, char *argv[]) 16.{ 17. int i, j, maxi, listenfd, connfd, sockfd; 18. int nready; 19. ssize_t n; 20. char buf[MAXLINE], str[INET_ADDRSTRLEN]; 21. socklen_t clilen; 22. struct pollfd client[OPEN_MAX]; 23. struct sockaddr_in cliaddr, servaddr; 24. 25. listenfd Socket(AF_INET, SOCK_STREAM, 0); 26. 27. bzero(servaddr, sizeof(servaddr)); 28. servaddr.sin_family AF_INET; 29. servaddr.sin_addr.s_addr htonl(INADDR_ANY); 30. servaddr.sin_port htons(SERV_PORT); 31. 32. Bind(listenfd, (struct sockaddr *)servaddr, sizeof(servaddr)); 33. 34. Listen(listenfd, 20); 35. 36. client[0].fd listenfd; 37. client[0].events POLLRDNORM; /* listenfd监听普通读事件 */ 38. 39. for (i 1; i OPEN_MAX; i) 40. client[i].fd -1; /* 用-1初始化client[]里剩下元素 */ 41. maxi 0; /* client[]数组有效元素中最大元素下标 */ 42. 43. for ( ; ; ) { 44. nready poll(client, maxi1, -1); /* 阻塞 */ 45. if (client[0].revents POLLRDNORM) { /* 有客户端链接请求 */ 46. clilen sizeof(cliaddr); 47. connfd Accept(listenfd, (struct sockaddr *)cliaddr, clilen); 48. printf(received from %s at PORT %d\n, 49. inet_ntop(AF_INET, cliaddr.sin_addr, str, sizeof(str)), 50. ntohs(cliaddr.sin_port)); 51. for (i 1; i OPEN_MAX; i) { 52. if (client[i].fd 0) { 53. client[i].fd connfd; /* 找到client[]中空闲的位置存放accept返回的connfd */ 54. break; 55. } 56. } 57. 58. if (i OPEN_MAX) 59. perr_exit(too many clients); 60. 61. client[i].events POLLRDNORM; /* 设置刚刚返回的connfd监控读事件 */ 62. if (i maxi) 63. maxi i; /* 更新client[]中最大元素下标 */ 64. if (--nready 0) 65. continue; /* 没有更多就绪事件时,继续回到poll阻塞 */ 66. } 67. for (i 1; i maxi; i) { /* 检测client[] */ 68. if ((sockfd client[i].fd) 0) 69. continue; 70. if (client[i].revents (POLLRDNORM | POLLERR)) { 71. if ((n Read(sockfd, buf, MAXLINE)) 0) { 72. if (errno ECONNRESET) { /* 当收到 RST标志时 */ 73. /* connection reset by client */ 74. printf(client[%d] aborted connection\n, i); 75. Close(sockfd); 76. client[i].fd -1; 77. } else { 78. perr_exit(read error); 79. } 80. } else if (n 0) { 81. /* connection closed by client */ 82. printf(client[%d] closed connection\n, i); 83. Close(sockfd); 84. client[i].fd -1; 85. } else { 86. for (j 0; j n; j) 87. buf[j] toupper(buf[j]); 88. Writen(sockfd, buf, n); 89. } 90. if (--nready 0) 91. break; /* no more readable descriptors */ 92. } 93. } 94. } 95. return 0; 96.} 四.优缺点总结 更改单进程打开1024文件限制 的方法: 可以通过 /proc/sys/fs/file-max 查看当前系统最大打开文件个数 可以通过ulimit -a 查看单个进程打开的最大文件个数 修改方法修改配置文件 改写 /etc/security/limits.conf如下图

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

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

相关文章

做网站一屏的尺寸是服务器代理加盟

题目描述 洛洛有一份私人歌单,歌单里面塞满了他喜欢的歌曲,像夏恋、雨道、彩月、幻昼……整整有好几百首。洛洛每天都要把他的歌单听一遍,以致于他都能知道在什么时候放的是什么歌。 洛洛在向你推荐了他的歌单之后,决定考考你&am…

百度 网站改版了工程建设项目货物招标投标办法

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:求 0—7 所能组成的奇数个数…

湖北网站seo深圳app定制开发外包公司

目录 1 memset 函数 2 bzero函数 在编程中,经常需要将某一块内存中的数据全部设置为指定的值,譬如在定义数组、结构体这种类型变量时,通常需要对其进行初始化操作,而初始化操作一般都是将其占用的内存空间全部填充为 0。 1 me…

网站地址栏图标文字搜索微信公众号平台

打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.com/thinkgamer前言 由于业务关系,最近一段时间一直在…

十八个免费的舆情网站做网站工具 不懂代码

在ABP vNext上的第一个公告之后,我们对代码库进行了很多改进(GitHub存储库上的1100多次提交).我们已经创建了功能,示例,文档等等.在这篇文章中,我想告诉你一些新闻和项目的状态.ABP微服务演示解决方案ABP框架的主要目标之一是提供创建微服务解决方案的便利基础设施.我们一直在努…

利用百度云做网站珠海网站建设 金蝶

前言:哈喽小伙伴们,经过前边的学习我们已经掌握了Linux的基本指令和权限,相信大家学完这些之后都会对Linux有一个更加深入的认识,但是Linux的学习可以说是从现在才刚刚开始。 这篇文章,我们将讲解若干个Linux的开发工…

一般网站的前台功能模块领导交给你一个网站你该怎么做

摘要解读 我们提出了一种能够以全双工方式运行的生成性对话系统,实现了无缝互动。该系统基于一个精心调整的大型语言模型(LLM),使其能够感知模块、运动功能模块以及一个具有两种状态(称为神经有限状态机,n…

网站数据分析报告软文营销为什么要讲故事

🌈个人主页: Aileen_0v0🔥系列专栏: 一见倾心,再见倾城 --- 计算机网络~💫个人格言:"没有罗马,那就自己创造罗马~" 目录 计算机网络分层结构 OSI参考模型 OSI模型起源 失败原因: OSI模型组成 协议的作用 📝全文…

怎么做网站呢成都网站建设开发公

代码随想录算法训练营第五十三天| 1143.最长公共子序列、1035.不相交的线、53.最大子序和动态规划 题目 1143.最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符…

餐厅网站建设文案书怎么注册域名网址

合法二叉搜索树 实例要求 实现一个函数,检查一棵二叉树是否为二叉搜索树; 示例 1: 输入:2/ \1 3 输出: true 示例 2: 输入:5/ \1 4/ \3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但是其右子节点值为 4 …

做一般的公司网站需要多少钱企查查企业信息查询平台

目录 一、信号 1、基本概念 2、用户处理信号的方式 3、查看信号 4、可靠信号和不可靠信号 5、信号种类 6、终止进程信号的区别 二、进程对信号的处理 1、signal()函数 2、sigaction()函数 3、代码演示 4、运行结果…

建设厅网站平顶山赣州网上房地产

今天分享百度提前批的 Java 后端开发面经,整体上考察的点挺多的,主要重点考察了网络i/o、网络协议、linux系统、mysql,Java 问的不多,可能是百度的后端开发的语言不是主要以 Java 为主,所以重点看面试者的计算机基础是…

网站建设论文大全济南做网站的好公司

文章目录 概述什么是接口? 1、API分类特征SOAP - WSDLWeb services 三种基本元素: OpenApi - Swagger UISpringboot Actuator 2、API检测流程Method:请求方法URL:唯一资源定位符Params:请求参数Authorization&#xff…

罗湖网站制作公司西安技术网站建设

本汇编代码是以下两篇文章讲解的内容的内核代码; 【OS学习笔记】二十三 保护模式七:保护模式下任务的隔离与任务的特权级概念【OS学习笔记】二十四 保护模式七:调用门与依从的代码段----特权级保护 需要先学习上述两篇文章的内容,方能看懂下…

新发地网站建设客户管理软件有哪些

本文主要分享了,SpringCloud Gateway网关在url参数带有空格或者特殊字符的情况下,转发失败导致响应错误码400的解决方案。 响应400错误码的2种场景: 1.参数带空格,Gateway会误认为该空格是切割符,如?phone 135****6…

前端网站效果有哪些2017网站建设方案

Redis实战热身Bitfields篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的(采用BSD许可证),用作数据库、缓存、消息代理…

一级a做爰片免费网站破解版前端开发工作岗位

请到本专栏顶置查阅最新的华为OD机试宝典 点击跳转到本专栏-算法之翼:华为OD机试 🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,深度掌握! 文章目录 【2023年华为OD机试真题(C卷)】敏感字段加密(字符串…

科技类网站模板Wordpress火车头采集标题前乱码

摘 要 相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低理财公司的运营人员成本,实现了“财来财往”的标准化、制度化、程序化的管理,有效地防止了“财来财往”的随意管理,提高了信息的处理速度和精确度,能…

个人flash网站大学生兼职网站的融资方案

三种方案,你看看哪个比较适合你1,适用于学生: 写两个方法,一个新增一个更新,在新增完了以后马上去查询一下,按主键倒叙排列,取到最新插入的id,前提主键是自增的且不是uuid,然后把查到的主键返回出去作为形参让更新方法接收到,然后更新即可.2,适用于ssh框架: 写两个事务,事务的传…

河南省建设部官方网站价格划算的做pc端网站

按键组合作用Ctrl Shift I开发人员工具Ctrl E定位到 空地址栏Ctrl L定位到 地址栏Ctrl Shift B显示或隐藏 收藏夹栏Ctrl Shift O打开收藏夹(搜索)Ctrl T打开一个新标签页Ctrl W关闭当前标签页Ctrl Shift T重新打开刚才关闭的标签页Ctrl Tab切换到下一个标签页Ctrl…