作业-day-240522

思维导图

使用IO多路复用实现并发

select实现TCP服务器端

#include <myhead.h>#define SER_IP "192.168.125.112"
#define SER_PORT 8888int main(int argc, const char *argv[])
{int sfd=socket(AF_INET,SOCK_STREAM,0);if(sfd == -1){perror("socket error");return -1;}struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_addr.s_addr=inet_addr(SER_IP);sin.sin_port=htons(SER_PORT);if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("bind error");return -1;}printf("bind success\n");if(listen(sfd,128) == -1){perror("listen error");return -1;}printf("listen success");struct sockaddr_in cin;socklen_t addrlen=sizeof(cin);fd_set readfds,tempfds;FD_ZERO(&readfds);FD_SET(sfd,&readfds);FD_SET(0,&readfds);struct sockaddr_in cin_arr[1024];int newfd=0;int maxfd=sfd;while(1){tempfds=readfds;int res=select(maxfd+1,&tempfds,NULL,NULL,NULL);if(res == -1){perror("select error");return -1;}else if(res == 0){printf("timeout\n");return -1;}for(int i=0;i<=maxfd;i++){if(!FD_ISSET(i,&tempfds))continue;if(i == sfd){newfd=accept(i,(struct sockaddr*)&cin,&addrlen);if(newfd == -1){perror("accept error");return -1;}printf("[%s:%d]发来请求\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));if(newfd>=maxfd)maxfd=newfd;FD_SET(newfd,&readfds);cin_arr[newfd]=cin;}else if(i == 0){char buf[128]="";bzero(buf,sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]=0;printf("输入的信息为:%s\n",buf);for(int k=4;k<=maxfd;k++)send(k,buf,strlen(buf),0);}else{char rbuf[128]="";int res=recv(i,rbuf,sizeof(rbuf),0);if(res == 0){printf("客户端已下线\n");close(i);FD_CLR(i,&readfds);for(int j=maxfd;j>=sfd;j++){if(FD_ISSET(j,&readfds)){maxfd=j;break;}}continue;}printf("[%s:%d]:%s\n",inet_ntoa(cin_arr[i].sin_addr),ntohs(cin_arr[i].sin_port),rbuf);for(int k=4;k<=maxfd;k++){if(k != i)send(k,rbuf,strlen(rbuf),0);}}}}close(sfd);return 0;
}

poll实现TCP客户端

#include <myhead.h>#define SER_IP "192.168.125.112"
#define SER_PORT 8888
#define CLI_IP "192.168.125.112"
#define CLI_PORT 7777int main(int argc, const char *argv[])
{int cfd=socket(AF_INET,SOCK_STREAM,0);if(cfd == -1){perror("socket error");return -1;}struct sockaddr_in cin;cin.sin_family=AF_INET;cin.sin_addr.s_addr=inet_addr(CLI_IP);cin.sin_port=htons(CLI_PORT);if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin)) == -1){perror("bind error");return -1;}printf("bind success\n");struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_addr.s_addr=inet_addr(SER_IP);;sin.sin_port=htons(SER_PORT);if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("connect error");return -1;}printf("connect success\n");struct pollfd pfd[2];pfd[0].fd=0;pfd[0].events=POLLIN;pfd[1].fd=cfd;pfd[1].events=POLLIN;char wbuf[128]="";char rbuf[128]="";while(1){int res=poll(pfd,2,-1);if(res == -1){perror("poll error");return -1;}else if(res == 0){printf("timeout");return -1;}if(pfd[0].revents == POLLIN){bzero(wbuf,sizeof(wbuf));printf("请输入:");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;send(cfd,wbuf,strlen(wbuf),0);printf("发送成功\n");}if(pfd[1].revents == POLLIN){bzero(rbuf,sizeof(rbuf));recv(cfd,rbuf,sizeof(rbuf),0);printf("读取的内容为:%s\n",rbuf);}}close(cfd);return 0;
}

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

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

相关文章

脆皮之“字符函数与字符串函数”宝典

hello&#xff0c;大家好呀&#xff0c;感觉我之前有偷偷摸鱼了&#xff0c;今天又开始学习啦。加油&#xff01;&#xff01;&#xff01; 文章目录 1. 字符分类函数2. 字符转换函数3. strlen的使用和模拟实现3.1 strlen 的使用3.1 strlen 的模拟1.计算器方法2.指针-指针的方…

Python的shutil模块探索,文件操作的瑞士军刀

hello&#xff0c;大家好&#xff0c;我是一点&#xff0c;专注于Python编程&#xff0c;如果你也对感Python感兴趣&#xff0c;欢迎关注交流。 希望可以持续更新一些有意思的文章&#xff0c;如果觉得还不错&#xff0c;欢迎点赞关注&#xff0c;有啥想说的&#xff0c;可以留…

每周刷题第三期

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏&#xff1a;Python 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 目录 题目一&#xff1a;环形链表 题目二&#xff1a;删除有序数组中的重复项 题目三&#xff1a;有效的括号 题…

从左上角到右下角的最小距离和

题目描述&#xff1a;给定一个二维数组matrix&#xff0c;一个人必须从左上角出发&#xff0c;最后到达右下角&#xff0c;沿途只可以向下或者向右走&#xff0c;沿途的数字都累加就是距离累加和&#xff0c;返回最小距离累加和。 way&#xff1a;无他&#xff0c;dp[i] [j]表…

《队列》

描述 学校体操队到操场集合&#xff0c;排成每行2人&#xff0c;最后多出1人;排成每行3人&#xff0c;也多出1人。分别排成每行4、5、6人&#xff0c;都多出1人。当排成每行7人时&#xff0c;正好不多,求校体操队至少多少人。 输入描述 无 输出描述 满足要求的人数 样例输入…

Python语法学习之 - 生成器表达式(Generator Expression)

第一次见这样的语法 本人之前一直是Java工程师&#xff0c;最近接触了一个Python项目&#xff0c;第一次看到如下的代码&#xff1a; i sum(letter in target_arr for letter in source_arr)这条语句是计算source 与 target 数组中有几个单词是相同的。 当我第一眼看到这样…

shell遍历路径所有文件并把列表写成字符串遍历

1. ls dir/* | tr ‘\n’ ’ ’ 换行替换成空格 你可以使用 ls 命令和 tr 命令来将文件列表根据空格拼接起来成一个字符串。以下是一个示例&#xff1a; ls dir/* | tr \n 解释 ls dir/*&#xff1a;列出 dir 目录下的所有文件。tr \n &#xff1a;将所有的换行符&#xf…

ChatGPT生成常见面试题【面试准备】

ChatGPT生成常见面试题【面试准备】 前言版权ChatGPT生成常见面试题【面试准备】MySQL面试问题与回答1. 数据库连接与操作2. 索引和查询优化3. 事务管理4. 索引是什么&#xff1f;为什么使用索引可以提高查询性能&#xff1f;如何在MySQL中创建索引&#xff1f;5. SQL查询优化有…

Varjo XR-4功能详解:由凝视驱动的XR自动对焦相机系统

Varjo是XR市场中拥有领先技术的虚拟现实设备供应商&#xff0c;其将可变焦距摄像机直通系统带入到虚拟和混合现实场景中。在本篇文章中&#xff0c;Varjo的技术工程师维尔蒂莫宁详细介绍了这项在Varjo XR-4焦点版中投入应用的技术。 对可变焦距光学系统的需求 目前所有其他XR头…

WPF之容器标签之Canvas布局标签

Canvas: 定义一个区域&#xff0c;可在其中使用相对于 Canvas 区域的坐标以显式方式来定位子元素。 实例 可以在子标签使用Canvas属性设置定位 <Canvas Width"500" Height"300"><StackPanel Width"100" Height"100"Backgro…

网页抓取之requests库的使用

Python网络数据采集利器 - Requests库的使用指南 简介 在Python网络爬虫领域,优秀的第三方库Requests可谓是必学的重要工具。它提供了相当人性化的API,让我们能够用极其简洁的代码发送HTTP/HTTPS请求,并且自动处理cookies、headers、编码等诸多繁琐细节,大大减轻了网页抓取的…

【pdb的使用方法】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、 pdb 是什么&#xff1f;二、基本用法1.启动 PDB 调试器&#xff1a;2.单步执行代码&#xff1a;3.查看变量值&#xff1a;4.退出调试器&#xff1a; 三、高级用…

指数分布的理解,推导与应用

指数分布的定义 在浙大版的教材中&#xff0c;指数分布的定义如下&#xff1a; 若连续型的随机变量 X X X的概率密度为&#xff1a; f ( x ) { 1 θ e − x θ , x>0 0 , 其他 f(x) \begin{cases} \frac{1}{\theta} e^{-\frac{x}{\theta}}, & \text{x>0}\\ 0, &a…

mvn编译所有单元测试报错OOM

org.mockito.exceptions.base.MockitoException: Cannot instantiate InjectMocks field named ‘productLogic’ of type ‘class .ProductLogic’. You haven’t provided the instance at field declaration so I tried to construct the instance. However the constructo…

Python正则表达式与Excel文件名批量匹配技术文章

目录 引言 正则表达式基础 Python中的re模块 Excel文件名批量匹配案例 常见问题与解决方案 结论 引言 在现代办公环境中&#xff0c;Excel文件几乎成为了数据分析和处理的标配工具。由于Excel文件可能包含大量的数据和信息&#xff0c;因此&#xff0c;对Excel文件的命名…

在aspNetCore中 使用System.Text.Json的定制功能, 将定制化的json返回给前端

C# 默认大写, 而大部分的前端默认小写, 这时候可以如此配置: builder.Services.AddControllers().AddJsonOptions((opt) > {opt.JsonSerializerOptions.PropertyNamingPolicy System.Text.Json.JsonNamingPolicy.CamelCase;opt.JsonSerializerOptions.WriteIndented true…

DSPF网络类型实验1

对R6配置 对R1配置 对R2 对R3 对R4 对R5 对R1R2R3R4R5加用户 环回处理 然后开始配置缺省 R1有两个下一跳 3&#xff0c;4&#xff0c;5同R2 然后对R1 dynamic动态 对R2 手写 把注册加上 register R3同R2处理

机柜里面的设备有哪些

一、服务器 服务器是机柜中最常见的设备之一。它们通常被用于存储和运行数据、应用程序和服务。不同的服务器通常使用不同的操作系统和处理器架构&#xff0c;以满足不同的需求。服务器可以使用冗余电源和冗余存储空间等措施&#xff0c;以确保数据安全和可靠性。 二、交换机 交…

删除链表的倒数第N个节点-力扣

第一种方法是使用前后指针&#xff0c;前指针先向前走n1步&#xff0c;然后前后指针同时向前&#xff0c;当前指针指向NULL时&#xff0c;后指针正好指向需要删除的节点的前一个节点&#xff0c;操作后指针删除即可。 代码如下&#xff1a; /*** Definition for singly-linked…