网站审批号一起做网站女装夏季裙

news/2025/9/23 4:19:19/文章来源:
网站审批号,一起做网站女装夏季裙,百度账户托管公司,扬州做阿里巴巴的公司网站设计灵感: 1 单线程io多路复用服务端 2 使用poll实现 3 将server_sockfd client_sockfd 设为非阻塞,实现最大io效率 4 使用套接字选项SO_REUSEADDR 用于测试环境调试 5 将server_sockfd 和每一个有效的client_sockfd 都设为poll的监控事件 6 有客户端关闭连接时,自动从数…设计灵感: 1 单线程io多路复用服务端 2 使用poll实现 3 将server_sockfd client_sockfd 设为非阻塞,实现最大io效率 4 使用套接字选项SO_REUSEADDR 用于测试环境调试 5 将server_sockfd 和每一个有效的client_sockfd 都设为poll的监控事件 6 有客户端关闭连接时,自动从数组中删除,并调整相应的count值 功能: 可实现多客户端同时连接,echo收发无感 注意事项: 1 运行环境 unix-like gnu_c  2 开启服务端后 可无限开启客户端 3 赠送对比用双循环阻塞服务端 4 赠送测试用客户端 poll多路复用服务端: #define _GNU_SOURCE #include stdio.h #include sys/socket.h #include sys/un.h #include fcntl.h #include arpa/inet.h #include netinet/in.h #include sys/poll.h #include stdlib.h #include string.h #include unistd.h#define SERVER_IP 192.168.142.132 #define SERVER_PORT 50013 // 设置非阻塞用函数 void set_non_blocking(int sockfd) {// 获取默认flagsint flags fcntl(sockfd, F_GETFL, 0);if (flags -1){perror(fcntl F_GETFL);}// 位运算 加上O_NONBLOCKflags | O_NONBLOCK;// 设置 flagsif (fcntl(sockfd, F_SETFL, flags) -1){perror(fcntl F_SETFL);} } int main() {int server_sockfd, client_sockfd;struct sockaddr_in server_sockaddr, client_sockaddr;memset(server_sockaddr, 0, sizeof(server_sockaddr));memset(client_sockaddr, 0, sizeof(client_sockaddr));socklen_t client_sockaddr_len sizeof(client_sockaddr);socklen_t server_sockaddr_len sizeof(server_sockaddr);ssize_t send_bytes, recv_bytes;char send_buf[1024] How can I he53453oday ?;char recv_buf[1024] {0};// 循环用i,j,计数用count:pollfds[count]中每增加一个元素 countint i 0, j 0, count 0;// 系统允许的单进程 最大fd数量 1024576long max_fds sysconf(_SC_OPEN_MAX);// 创建一个最大fd数量的数组,并将所有元素的所有字段设为0struct pollfd *pollfds calloc(max_fds, sizeof(struct pollfd));if (pollfds NULL){perror(calloc);}// 将每个元素的fd设为-1,表示无效for (i 0; i max_fds; i){pollfds[i].fd -1;}// 又名 listen socket 用于监听请求,ipv4 tcpserver_sockfd socket(AF_INET, SOCK_STREAM, 0);if (server_sockfd -1){perror(socket);}// 为什么要将server_sockfd设为非阻塞?// server_sockfd相关的accept被poll监视,只有读就绪(有连接到来时)才回调用accept// 这意味着accept通常不会阻塞,但是在极端情况下,客户端连接有迅速关闭,则accept有可能阻塞set_non_blocking(server_sockfd);// SO_REUSEADDR 地址端口复用,任意时刻只有一个socket能监听,主要用于程序重启// SO_REUSEPORT 地址端口复用,同时监听,自动负载均衡int optval 1;if (setsockopt(server_sockfd, SOL_SOCKET, SO_REUSEADDR, optval, sizeof(optval)) -1){perror(setsockopt);}// 设置协议server_sockaddr.sin_family AF_INET;// 设置转换端口server_sockaddr.sin_port htons(SERVER_PORT);// 设置转换ip地址if (inet_pton(AF_INET, SERVER_IP, server_sockaddr.sin_addr.s_addr) -1){perror(inet_pton);}// 绑定if (bind(server_sockfd, (struct sockaddr *)server_sockaddr, server_sockaddr_len) -1){perror(bind);}// 监听,调整了最大等待数量为1024if (listen(server_sockfd, 1024) -1){perror(listen);}// 将server_sockfd加入POLLIN监听事件pollfds[0].fd server_sockfd;pollfds[0].events POLLIN;// count现在是0,后变成1,遍历icount,也就是判断pollfds[0]// 但是pollfds[0]读就绪后,主要执行逻辑是accept,因此单独判断count;printf(server start...\n);while (1){// 如果没有事件真实发生,程序将阻塞在此,而不是一味地循环int r poll(pollfds, count, -1);// 至少有一个revent被设置if (r 0){// 如果有连接请求if (pollfds[0].revents POLLIN){// 就连接client_sockfd accept(server_sockfd, (struct sockaddr *)client_sockaddr, client_sockaddr_len);if (client_sockfd -1){perror(accept);}// 将返回的client_sockfd设为非阻塞set_non_blocking(client_sockfd);// 如果代码首次到这,count就是1,pollfds[1]被填充,符合逻辑pollfds[count].fd client_sockfd;// 同时监控读写pollfds[count].events POLLIN | POLLOUT;// 向后挪一位count;}// 首次加入监控事件的accept返回的client_sockfd不会在本次循环中被poll监控,需要等到下次循环for (i 1; i count; i){// 从索引1开始(索引0用于accept已单独处理),如果被监控的fd读就绪if (pollfds[i].revents POLLIN){// 读recv_bytes recv(pollfds[i].fd, recv_buf, sizeof(recv_buf), 0);if (recv_bytes -1){perror(recv);}// 如果客户端关闭了连接if (recv_bytes 0){printf(close by peer\n);// 服务器也关闭连接close(pollfds[i].fd);// 1 将后面的fd往前挪for (j i; j count - 1; j){pollfds[j] pollfds[j 1];}// 2 最后一个fd是一个无效的副本 手动重置pollfds[count - 1].fd -1;pollfds[count - 1].events 0;pollfds[count - 1].revents 0;// 3 count应该减1count--;}// 收到了数据if (recv_bytes 0){// 打印收到的数据printf(%s\n, recv_buf);// 同时,如果这个fd是写就绪的if (pollfds[i].revents POLLOUT){// 写send_bytes send(pollfds[i].fd, send_buf, strlen(send_buf), 0);if (send_bytes -1){perror(send);}}}}}}if (r -1){perror(poll);}}// 关闭server_sockfd,代码不可达close(server_sockfd);// 释放动态分配的内存,代码不可达free(pollfds);return 0; }对比用双循环阻塞服务端: #define _GNU_SOURCE #include stdio.h #include sys/socket.h #include sys/un.h #include arpa/inet.h #include netinet/in.h #include string.h #include unistd.h#define SERVER_IP 192.168.142.132 #define SERVER_PORT 50013int main() {int server_sockfd, client_sockfd;struct sockaddr_in server_sockaddr, client_sockaddr;memset(server_sockaddr, 0, sizeof(server_sockaddr));memset(client_sockaddr, 0, sizeof(client_sockaddr));socklen_t client_sockaddr_len sizeof(client_sockaddr);ssize_t send_bytes, recv_bytes;char send_buf[1024] How can I help you today ?;char recv_buf[1024] {0};server_sockfd socket(AF_INET, SOCK_STREAM, 0);if (server_sockfd -1){perror(socket);}int optval 1;setsockopt(server_sockfd, SOL_SOCKET, SO_REUSEADDR, optval, sizeof(optval));server_sockaddr.sin_family AF_INET;inet_pton(AF_INET, SERVER_IP, server_sockaddr.sin_addr.s_addr);server_sockaddr.sin_port htons(SERVER_PORT);if (bind(server_sockfd, (struct sockaddr *)server_sockaddr, sizeof(server_sockaddr)) -1){perror(bind);}if (listen(server_sockfd, 16) -1){perror(listen);}printf(server start...\n);while (1){client_sockfd accept(server_sockfd, (struct sockaddr *)client_sockaddr, client_sockaddr_len);if (client_sockfd -1){perror(accept);}while (1){recv_bytes recv(client_sockfd, recv_buf, sizeof(recv_buf), 0);if (recv_bytes -1){perror(recv);}else if (recv_bytes 0){printf(closed by peer\n);break;}else{printf(%s\n, recv_buf);}send_bytes send(client_sockfd, send_buf, strlen(send_buf), 0);if (send_bytes -1){perror(send);}}}close(server_sockfd);return 0; }测试用客户端: #define _GNU_SOURCE #include stdio.h #include sys/socket.h #include sys/un.h #include arpa/inet.h #include netinet/in.h #include string.h #include unistd.h #include stdlib.h #include time.h #include fcntl.h #define SERVER_IP 192.168.142.132 #define SERVER_PORT 50013 int set_non_blocking(int sockfd) {int flags fcntl(sockfd, F_GETFL, 0);if (flags -1){perror(fcntl(F_GETFL));}flags | O_NONBLOCK;if (fcntl(sockfd, F_SETFL, flags) -1){perror(fcntl(F_SETFL));}return 0; } int main() {int client_sockfd;struct sockaddr_in server_sockaddr, client_sockaddr;memset(server_sockaddr, 0, sizeof(server_sockaddr));memset(client_sockaddr, 0, sizeof(client_sockaddr));socklen_t client_sockaddr_len sizeof(client_sockaddr);ssize_t send_bytes, recv_bytes;char send_buf[1024] {0};char recv_buf[1024] {0};client_sockfd socket(AF_INET, SOCK_STREAM, 0);if (client_sockfd -1){perror(socket);}//set_non_blocking(client_sockfd);inet_pton(AF_INET, SERVER_IP, server_sockaddr.sin_addr.s_addr);server_sockaddr.sin_port htons(SERVER_PORT);server_sockaddr.sin_family AF_INET;if (connect(client_sockfd, (struct sockaddr *)server_sockaddr, sizeof(server_sockaddr)) -1){perror(connect);}getsockname(client_sockfd, (struct sockaddr *)client_sockaddr, client_sockaddr_len);snprintf(send_buf, sizeof(send_buf), %u:he###llo s???ver !!!,ntohs(client_sockaddr.sin_port));while (1){send_bytes send(client_sockfd, send_buf, strlen(send_buf), 0);if (send_bytes -1){perror(send);}recv_bytes recv(client_sockfd, recv_buf, sizeof(recv_buf), 0);if (recv_bytes -1){perror(recv);}printf(%s\n, recv_buf);sleep(2);}close(client_sockfd);return 0; }

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

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

相关文章

深圳做网站公司 南山信阳高端网站建设

附:赛制和比赛规则一、赛制1.比赛执行国家体育总局最新审定的《乒乓球竞赛规则》,比赛使用红双喜40毫米白色乒乓球,执行国际乒联关于“11分”制,一分钟暂停,“无遮挡发球”的竞赛规定。2.男子团体比赛采用五场三胜,每盘…

网站建设的前期工作基础win7网站建设

“楼下一个男人病得要死,那间隔壁的一家唱着留声机,对面是弄孩子。楼上有两人狂笑;还有打牌声。河中的船上有女人哭着她死去的母亲。人类的悲欢并不相通,我只觉得他们吵闹。” A - XORwice 把a和b看成二进制数处理,不…

自己建设小城市网站得多少钱美图秀秀网页版

2009全国硕士研究生入学考试过关必练_网络试题一. 通过选择题过关必练1. 常用的数据传输速率单位有Kbps、Mbps、Gbps与Tbps,1Mbps等于A. 1103bps B. 1106bps C. 1109bps D. 11012bps2. 常用的数据传输速率单位有Kbps、Mbps、Gbps,如果局域网的…

做网站如何添加表单知了网站后台

布隆过滤器是一种空间效率很高的概率型数据结构,主要用于快速判断一个元素是否存在于一个集合中。它的主要应用场景、优势和不足如下: 应用场景 缓存:在缓存系统中,可以利用布隆过滤器快速判断某个数据是否存在于缓存中&#xf…

网站建设完成后为何无法运营下去cookies因预料之外的输出被阻止 wordpress

鼠标悬浮线条动态变化 整体效果核心代码html 代码:css 部分代码: 完整代码如下html 页面:css 样式:页面渲染效果: 整体效果 这个链接悬浮效果主要用 css3 的 animation 属性配合 :hover 伪选择器来实现的。 此效果可以…

东莞建设网站流程从化定制型网站建设

背景 通过调用函数的url,将参数传递给函数执行,函数里如何获取这个参数 过程 下一个简单的demo如下 参考这个链接https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0420.html写一个demo,这个是百度视频云获取token的…

制做网站首先应该怎么做南宁住房和城乡建设部网站

Linux中系统调用很多,但是再多也有几种不变的根本:创建,打开,写,读,关闭,删除,等最最基本的操作,就像人们所常说的,Linux上的一切我们都可以当做文件来处理&a…

如何用asp编写网站后台企业号怎么注册

项目中用到了小程序的服务消息通知,通知订单状态信息,下边就是整理的一下代码,放到项目中,把项目的小程序appid和小程序的secret写进去,直接运行即可 提前申请好小程序服务信息通知短信模板,代码需要用到模…

可以做拟合的在线网站成都网站建设公司开发

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、系统展示四、核心代码4.1 查询项目4.2 移动端新增团队4.3 查询讲座4.4 讲座收藏4.5 小程序登录 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的创意工坊双创管理…

民权做网站哪家好建站公司服务

数字逻辑电路-学习指南一、判断题(判断结果为真(T)或为假(F)1.()逻辑函数的真值表是惟一的,但表达式不一定是惟一的。2.()在基数乘除法中,整数部分的转换采用“除基取余”法,小数部分的转换采用“乘基取整”法。3&…

东营网站建设公司廊坊高端模板建站

\(\color{#0066ff}{ 题目描述 }\) 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.…

河北网站优化公司乐清做网站的公司有哪些

一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点点小小的风波,我说我的好,他说他的好,非常容…

做网站和推广公司深圳网站建设与设计制作

什么是FFT? FFT(Fast Fourier Transformation) 是离散傅氏变换(DFT)的快速算法,即快速傅氏变换。FFT使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多&#x…

网站建设优化制作公司网站注册建设

上一篇提到为了给用户打造一个完全无缝衔接的最佳体验,UWP开发者最好也要实现App设置和数据的跨平台 分析了数据漫游和OneDrive的优缺点,结合自己App实际需要,我选择了OneDrive。 毕竟数据漫游100KB不够用啊。。。 这一次给大家我千辛万苦找…

网站关键词库是怎么做的徐州网站建设咨询

1.web151 前端验证 前端验证&#xff0c;修改html代码&#xff0c;上传还有一句话木马的php文件,之后用蚁剑连接即可找到flag <?php eval($_POST[1])?>2.web152 后端验证&#xff0c;修改mime类型(content-type) burp抓包&#xff0c;修改content-type为image/png …

做网站怎么加视频作文网推荐

阿里云数据库PolarDB租用价格表&#xff0c;云数据库PolarDB MySQL版2核4GB&#xff08;通用&#xff09;、2个节点、60 GB存储空间55元5天&#xff0c;云数据库 PolarDB 分布式版标准版2核16G&#xff08;通用&#xff09;57.6元3天&#xff0c;阿里云百科aliyunbaike.com分享…

12306的网站多少钱做的免费网站建设公司

前言C# 11 中即将到来一个可以让重视性能的开发者狂喜的重量级特性&#xff0c;这个特性主要是围绕着一个重要底层性能设施 ref 和 struct 的一系列改进。但是这部分的改进涉及的内容较多&#xff0c;不一定能在 .NET 7&#xff08;C# 11&#xff09;做完&#xff0c;因此部分内…

中国wix网站制作公司wordpress插件安装目录

如今的goverment领导们觉得地图都太抽象&#xff0c;只有google Earth式的应用能引起他们的兴趣&#xff0c;作为为公仆服务的我们自然要学习掌握3D GIS技术来提高zf的执政能力了&#xff0c;于是Sky Line来了&#xff0c;拿到开发手册的时候觉得接口不多应该很容易开发&#x…

2017湖北建设教育协会网站wordpress 又拍云 缓存

一、什么是逻辑回归 1、逻辑回归&#xff08;Logistic Regression&#xff09;是机器学习中的一种分类模型&#xff0c;逻辑回归是一种分类算法&#xff0c;虽然名字中带有回归&#xff0c;但是它与回归之间有一定的联系。由于算法的简单和高效&#xff0c;在实际中应用非常广…

太原市建设厅官方网站国家专业分类目录

在Kotlin中&#xff0c;Lambda表达式是一种简洁的方式来定义匿名函数。Lambda表达式可以作为函数的实际参数或者返回值&#xff0c;使得函数成为高阶函数。本篇博客将介绍Lambda表达式的基本概念以及使用方法&#xff0c;并提供相关的示例代码。 Lambda表达式的基本概念 Lamb…