2024.4.17

poll客户端

#include <myhead.h>
#define IP "192.168.38.128"
#define PORT 8889
int main(int argc, const char *argv[])
{//创建套接字int cfd = socket(AF_INET,SOCK_STREAM,0);if(cfd == -1){perror("cfd");return -1;}//绑定//......//连接服务端struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect");return -1;}//定义poll结构体并填充struct pollfd pfd[2];pfd[0].fd = 0;pfd[0].events = POLLIN;pfd[1].fd = cfd;pfd[1].events = POLLIN;//poll多路复用,等待事件,设为永远阻塞char buf[128];while(1){	int res = poll(pfd,2,-1);if(res == -1){printf("poll error\n");return -1;}if(pfd[0].revents == POLLIN){scanf("%s",buf);if(strcmp(buf,"quit")==0){break;}send(cfd,buf,sizeof(buf),0);}if(pfd[1].revents==POLLIN){bzero(buf,sizeof(buf));recv(cfd,buf,sizeof(buf),0);printf("服务端发来消息:%s\n",buf);}}close(cfd);return 0;
}

select服务端

#include <myhead.h>
#define IP "192.168.38.128"
#define PROT 8889int main(int argc, const char *argv[])
{//创建套接字int sfd = socket(AF_INET,SOCK_STREAM,0);if(sfd == -1){perror("sfd");return -1;}//端口快速重用int opt = 1;if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))==-1) {perror("setsockopt");exit(EXIT_FAILURE);}//绑定服务端struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PROT);sin.sin_addr.s_addr = inet_addr(IP);if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind");return 0;}//监听if(listen(sfd,228)==-1){perror("listen");return 0;}//创建结构体接收客户端信息struct sockaddr_in cin;socklen_t len = sizeof(cin);int newfd = -1;//创建描述符集合fd_set readfd,tempfd;//清空集合FD_ZERO(&readfd);//添加到集合FD_SET(0,&readfd);FD_SET(sfd,&readfd);//保存最大描述符int maxfd = sfd;//创建一个套接字结构体数组,存储客户端描述符struct sockaddr_in cin_arr[1024];while(1){tempfd = readfd;//阻塞等待事件发生int res = select(maxfd+1,&tempfd,NULL,NULL,NULL);if(res == 0){printf("time out\n");return -1;}else if(res == -1){printf("error\n");return -1;}//事件发生for(int i=0;i<=maxfd;i++){if(!FD_ISSET(i,&tempfd)){continue;}//客户端连接事件if(i==sfd){newfd = accept(sfd,(struct sockaddr*)&cin,&len);if(newfd == -1){perror("newfd");return -1;}printf("[%s:%d]客户端已连接\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));//添加到集合并存储客户端描述符FD_SET(newfd,&readfd);cin_arr[newfd]=cin;//更新最大描述符if(maxfd < newfd){maxfd = newfd;}}//终端输入事件else if(i == 0){char buf[128];scanf("%s",buf);printf("终端打印:%s\n",buf);}//数据收发事件else{char buf[128];bzero(buf, 128);int res = recv(i,buf,128,0);//客户端退出if(res == 0){						printf("客户端已下线\n");close(i);//清除当前客户端描述符FD_CLR(i,&readfd);//重新获取最大描述符for(int j = maxfd;j>sfd;j--){if(FD_ISSET(j,&readfd)){maxfd = j;	//找到最大描述符后跳出循环不再寻找break;}}continue;}printf("客户端发来消息:%s\n",buf);}}}close(sfd);return 0;
}

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

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

相关文章

C++动态内存管理 解剖new/delete详细讲解(operator new,operator delete)

讨厌抄我作业和不让我抄作业的人 讨厌插队和不让我插队的人 讨厌用我东西和不让我用东西的人 讨厌借我钱和不借给我钱的人 讨厌开车加塞和不让我加塞的人 讨厌内卷和打扰我内卷的人 一、C中动态内存管理 1.new和delete操作内置类型 2.new和delete操作自定义类型 二、operat…

重生奇迹mu恶魔来袭副本

在游戏重生奇迹mu中&#xff0c;恶魔来袭副本是玩家能够组队通过的副本。但是因为手游组队的不方便性&#xff0c;部分玩家对其还是非常苦手。而今天&#xff0c;我们就给大家讲解一下这个游戏的双人通关攻略。 1、挂机找怪手动输出 (1)对于普通剧情副本而言&#xff0c;挂机…

python爬虫原理和编程实战:爬取CSDN博主的账号信息

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

黑马点评(四) -- 分布式锁

1 . 分布式锁基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程进行&#xff0c;让…

4.1 返回JSON数据

1. 默认实现方式 JSON是目前主流的前后端数据传输方式&#xff0c;Spring MVC中使用消息转换器HttpMessageConverter对JSON的转换提供了很好的支持&#xff0c;在Spring Boot中更进一步&#xff0c;对相关配置做了更进一步的简化。 默认情况下&#xff0c;当开发者新创建一个S…

24.4.17 驱动开发定时器作业,消抖

定时器消抖工作原理 在按键按下之后&#xff0c;进入中断处理函数&#xff0c;在中断处理函数中&#xff0c;定时时间10ms当定时时间到&#xff0c;执行定时器处理函数&#xff0c;在定时器处理函数中&#xff0c;读取管脚的电平状态如果读到的是低电平&#xff0c;表示按键按下…

刷题日记——质因数的个数

题目 分析&#xff08;从质数的判断角度出发&#xff09;&#xff08;递归&#xff09; 判断n是否是质数需要&#xff1a; 遍历&#xff0c;i从2开始到sqrt(n)&#xff0c;每次判断n是否能整除i&#xff0c;若能则不是质数&#xff0c;若不能则是 思路&#xff1a; 先判断n…

【MATLAB源码-第26期】基于matlab的FBMC/OQAM的误码率仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 FBMC&#xff08;Filter Bank Multicarrier&#xff09;是一种多载波调制技术&#xff0c;它采用滤波器组来处理频域内的子载波&#xff0c;以在有限带宽内实现高效的数据传输。OQAM&#xff08;Offset Quadrature Amplitude…

数据结构初阶:二叉树(一)

树概念及结构 树的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 有一个特殊的结点&a…

微前端 qiankun 框架接入问题记录

背景&#xff1a;需要搭建一个平台&#xff0c;这个平台的主要功能是集成各个子系统&#xff0c;方面对系统之间的统一管理。在搭建这样一个平台时&#xff0c;前端考虑使用微前端架构方式实现&#xff0c;使用的框架是 qiankun&#xff0c;本文主要记录在 qiankun 框架使用过程…

【Leetcode每日一题】 分治 - 颜色分类(难度⭐⭐)(57)

1. 题目解析 题目链接&#xff1a;75. 颜色分类 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路解析 本算法采用三指针法&#xff0c;将数组划分为三个区域&#xff0c;分别用于存放值为0、1和2的元素。通过…

Ubuntu修改DNS

【永久修改DNS】 临时修改DNS的方法是在 /etc/resolv.conf 添加&#xff1a;nameserver 8.8.8.8 nameserver 8.8.8.8 注意到/etc/resolv.conf最上面有这么一行&#xff1a; DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN 说明重启之后这个文件会被自动…

CTFHUB-技能树-Web前置技能-文件上传(无验证,JS前端验证,前端验证)

CTFHUB-技能树-Web前置技能-文件上传&#xff08;无验证&#xff0c;JS前端验证&#xff0c;前端验证—.htaccess&#xff09; 文章目录 CTFHUB-技能树-Web前置技能-文件上传&#xff08;无验证&#xff0c;JS前端验证&#xff0c;前端验证—.htaccess&#xff09;文件上传无验…

【在线OJ系统】自定义注解实现自增ID的无感插入

实现思路 首先自定义参数注解&#xff0c;然后根据AOP思想&#xff0c;找到该注解作用的切点&#xff0c;也就是mapper层对于mapper层的接口在执行前都会执行该aop操作&#xff1a;获取到对于的方法对象&#xff0c;根据方法对象获取参数列表&#xff0c;根据参数列表判断某个…

电商数据采集的网页抓取数据、淘宝、天猫、京东等平台的电商数据抓取|电商数据API接口网页爬虫、采集网站数据

电商数据采集的网页抓取数据、淘宝、天猫、京东等平台的电商数据抓取&#xff0c;网页爬虫、采集网站数据、网页数据采集软件、python爬虫、HTM网页提取、APP数据抓包、APP数据采集、一站式网站采集技术、BI数据的数据分析、数据标注等成为大数据发展中的热门技术关键词。那么电…

深入理解同步与异步编程及协程管理在Python中的应用

文章目录 1. 同步与异步函数的对比1.1 同步函数1.2 异步函数1.3 对比 2. 管理多个协程与异常处理2.1 并发执行多个协程2.2 错误处理2.3 任务取消 本文将探索Python中同步与异步编程的基本概念及其区别。还会详细介绍如何使用asyncio库来有效管理协程&#xff0c;包括任务的创建…

最新的网易星球GEC挖矿系统修复版 章鱼星球挖矿系统源码 区块链虚拟币交易源码 基于ThinkPHP5开发

区块链系统介绍 2018.12.10更新增加聚合数据短信接口 2018.11.19更新增加短信宝接口 2018.08.17修复Linux系统搭建验证码不显示问题 2018.08.09修复后台某处溢出数据库账号密码BUG 2018.08.06修复票卷BUG 源码介绍&#xff1a; 区块链系统中用户共九个等级&#xff0c;依…

旧衣服回收小程序,旧衣回收行业的必然发展趋势

近年来&#xff0c;旧衣回收行业成为了一个新型的创业项目&#xff0c;因其投资成本低、回报高的优势&#xff0c;也成为了当下年轻人的创业新选择。 一、旧衣服回收市场发展趋势 当下人们对衣物淘汰的速度逐渐加快&#xff0c;每年产生的废旧衣物高达百万吨&#xff0c;加之…

.cur 鼠标光标编辑器

详解透明贴图和三元光栅操作 - CodeBus 鼠标指针文件格式解析——Windows&#xff08;二&#xff09; (qq.com) [C/C] RGBA数组生成Windows下的ico文件_c ico格式-CSDN博客 色环设计 - CodeBus 左键绘制 右键选颜色 ctrl右键设置鼠标热点 F1导出.cur文件 //代码来源&…

【考研高数】学习笔记分享

派大星说数学&#xff08;导学部分&#xff09; 关于做题 测试 答疑阶段 直播 群内 高中基础知识导学 一、数与式 述了课程学习和因式分解、分式拆解等知识点。学生应了解课程内容&#xff0c;带着疑问听课&#xff0c;不要抄笔记&#xff0c;导学课和基础课都有测验&…