DAY53
作业:
运行1个服务器和2个客户端 实现效果: 服务器和2个客户端互相聊天,服务器和客户端都需要使用select模型去实现 服务器要监视2个客户端是否连接,2个客户端是否发来消息以及服务器自己的标准输入流 客户端要监视服务器是否发来消息以及客户端自己的标准输入流 在不开线程的情况下,实现互相聊天
#include<myhead.h>void intsert_newfd(int* newfd_arr,int* len,int newfd)
{newfd_arr[*len] = newfd;(*len)++;
}int find_newfd(int* newfd_arr,int len,int newfd)
{for(int i=0;i<len;i++){if(newfd_arr[i] == newfd){return i;}}return -1;
}void remove_newfd(int* newfd_arr,int* len,int newfd)
{int tar = find_newfd(newfd_arr,*len,newfd);if(tar == -1){return ;}for(int i=tar;i<*len-1;i++){newfd_arr[tar] = newfd_arr[tar+1];}(*len)--;
}int main(int argc,const char *argv[])
{if(argc != 2){printf("请输入正确的端口号\n");return 1;}//存放客户端的套接字int newfd_arr[100] = {0};//存放客户端的数量int newfd_count = 0;int port = atoi(argv[1]);int sfd = socket(AF_INET,SOCK_STREAM,0);struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(port);sin.sin_addr.s_addr = inet_addr("192.168.2.53");int reuse = setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse));bind(sfd,(struct sockaddr*)&sin,sizeof(sin));listen(sfd,128);fd_set readfds;FD_ZERO(&readfds);FD_SET(sfd,&readfds);FD_SET(0,&readfds);while(1){fd_set temp = readfds;//监视服务器套接字select(FD_SETSIZE,&temp,0,0,0);//如果 0 激活if(FD_ISSET(0,&temp) == 1){printf("标准输入流激活\n");char buf[32] = "";scanf("%s",buf);getchar();for(int i=0;i<newfd_count;i++){int fd = newfd_arr[i];write(fd,buf,strlen(buf));}}if(FD_ISSET(sfd,&temp)){//接收链接int newfd = accept(sfd,0,0);printf("有客户端连接\n");//将接收到的客户端的套接字放入监视列表FD_SET(newfd,&readfds);//将连接的客户端的套接字存入数组中进行统一管理intsert_newfd(newfd_arr,&newfd_count,newfd);}else{//判断每一个客户端是否激活,如果激活了,调用read来读取for(int i=0;i<newfd_count;i++){int newfd = newfd_arr[i];if(FD_ISSET(newfd,&temp)){//客户端套接字激活有两种情况:1、发来了信息 2、断开链接char buf[128] = "";int res = read(newfd,buf,sizeof(buf));//如果read阻塞,客户端断开连接,read返回0//如果read非阻塞,客户端断开连接,read返回-1if(res == 0){//说明客户端断开了连接//1、从监视列表中删除FD_CLR(newfd,&readfds);//2、从客户端数据中删除remove_newfd(newfd_arr,&newfd_count,newfd);//3、关闭客户端套接字close(newfd);printf("客户端已下线\n");break;}printf("客户端发来的消息为:%s\n",buf);}}}}close(sfd);return 0;
}
#include<myhead.h>
#define SER_PORT 6000
#define SER_IP "192.168.2.53"int main(int argc,char *argv[])
{if(argc != 2){printf("请输入正确的端口号\n");return 1;}int port = atoi(argv[1]);int cfd = socket(AF_INET,SOCK_STREAM,0);struct sockaddr_in cin;cin.sin_family = AF_INET; //通信域cin.sin_port = htons(port); //端口号cin.sin_addr.s_addr = inet_addr("192.168.2.53"); //IP地址bind(cfd,(struct sockaddr*)&cin,sizeof(cin));struct sockaddr_in sin;sin.sin_family = AF_INET; //通信域sin.sin_port = htons(SER_PORT); //服务器口号sin.sin_addr.s_addr = inet_addr(SER_IP); //服务器IP地址connect(cfd,(struct sockaddr*)&sin,sizeof(sin));//准备描述符集合fd_set readfds;//初始化:FD_ZERO(&readfds);//将管道读段描述符添加进入描述符集合FD_SET(cfd,&readfds);//将标准输入流添加进入描述符集合FD_SET(0,&readfds);while(1){fd_set temp = readfds;//监视readfds,此时readfds里面只有 0 和 cfdselect(FD_SETSIZE,&temp,0,0,0);//如果 0 激活if(FD_ISSET(0,&temp) == 1){printf("标准输入流激活\n");char buf[32] = "";scanf("%s",buf);getchar();write(cfd,buf,strlen(buf));if(strcmp(buf,"quit") == 0){break;}}if(FD_ISSET(cfd,&temp) == 1){printf("管道读端激活\n");char buf[32] = "";read(cfd,buf,sizeof(buf));printf("管道读取到的数据为:%s\n",buf);}}//5、关闭套接字close(cfd);return 0;
}
相关文章:
![](https://i-blog.csdnimg.cn/direct/d6193b6881e94ab8b17c3643461de36e.png)
DAY53
作业: 运行1个服务器和2个客户端 实现效果: 服务器和2个客户端互相聊天,服务器和客户端都需要使用select模型去实现 服务器要监视2个客户端是否连接,2个客户端是否发来消息以及服务器自己的标准输入流 客户端要监视服务器是否发来…...
![](https://img-blog.csdnimg.cn/img_convert/f129598788c34623b4467b4b5053f322.jpeg)
python中len是什么
Python len() 方法返回字符串长度。 len()方法语法: len( str ) 返回值: 返回字符串长度。 以下实例展示了len()的使用方法: #!/usr/bin/python str "this is string example....wow!!!"; print "字符串长度: ", len…...
![](https://img-blog.csdnimg.cn/img_convert/1031d764cbf142cb15185cede0790884.png)
推荐一个开源的kafka可视化客户端GUI工具(Kafka King)
大佬的博客地址: https://blog.ysboke.cn/posts/tools/kafka-king Github地址: https://github.com/Bronya0/Kafka-King Kafka-King功能清单 查看集群节点列表(完成)支持PLAINTEXT、SASL PLAINTEXT用户名密码认证(完…...
![](https://www.ngui.cc/images/no-images.jpg)
day 10 贪心算法
455. 分发饼干 饼干从大的开始利用,优先满足胃口大的; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(),g.end());sort(s.begin(),s.end());int res0;int indexs.size()-1;for…...
![](https://i-blog.csdnimg.cn/direct/4a6f7afd532a4af584226a26dc43aa1d.png)
网络安全审计技术原理与应用
网络安全审计概述 概念 定义:对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作 作用:建立“事后”安全保障措施,保存网络安全事件及行为信息,为网络安全事件分析提供线索及证据,以便发现潜在网络安全威胁行为,开展网络安全风险分析及管理 常…...
![](https://i-blog.csdnimg.cn/direct/1ab955fcb00c4b209382b3e13e3b2fc0.png)
计算机网络之TCP序号,确认序号和报文传输时间
开篇提示 本篇适合于了解基础知识,进行扩展提高的使用,附带考研习题以及解析。 TCP序号和确认序号的区别 TCP首部中有序号和确认序号,他们都是4个字节(4B),且在数据传输中有很重要的意义,那么两…...
![](https://www.ngui.cc/images/no-images.jpg)
HTML优化方法
HTML编码规范 代码格式化与缩进 1.缩进规则 推荐使用空格缩进而不是Tab,因为不同环境下空格的效果更加一致。常见缩进量为2个或4个空格 2.标签对齐 在嵌套的HTML结构中,子标签应当缩进,以清晰地展示层级关系。 3.属性的排列 …...
![](https://i-blog.csdnimg.cn/direct/89972d345007410598b18ffeeed64c0c.png)
Codeforces Round 961 D. Cases 【SOS DP、思维】
D. Cases 题意 有一个长度为 n n n 且仅由前 c c c 个大写字母组成的字符串,问最少选取多少种字母为每个单词的结尾,使得每个单词长度不超过 k k k 思路 首先注意到最后一个字母一定要选择,接下来我们给出一个断言:如果一个…...
![](https://i-blog.csdnimg.cn/direct/cbadb80de32545d6b7c99439f32af4b8.png)
VirtualBox上的Oracle Linux虚拟机安装Docker全流程
1.安装docker依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 2.安装docker仓库 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 生成docker的yum源配置到在 /etc/yum.repos.d/docker-ce.repo 3.安装D…...
![](https://i-blog.csdnimg.cn/direct/05cb942a250c452cab1776c1cd3ba63d.png)
LNMP安装部署
目录 一、Nginx安装部署 1.安装包下载 2.下载相关依赖工具 3. 创建运行用户 4.编译安装 5.优化路径 6.将nginx添加至系统服务 7.文件赋权 二、MySQL部署安装 1.解压 2.安装相关工具 3.创建运行用户 4.编译安装 5.修改配置文件 6.更改mysql安装目录和配置文件的属…...
![](https://www.ngui.cc/images/no-images.jpg)
django之自定义序列化器用法
在Django中,自定义序列化器方法通常用于处理复杂的数据转换逻辑,特别是在使用Django REST framework(DRF)时。自定义序列化器方法可以帮助你在序列化和反序列化过程中执行特定的逻辑,比如格式化日期、计算字段值、或者…...
![](https://i-blog.csdnimg.cn/direct/a44cc2baf4b6477fb91b6f390597b061.png)
20240821给飞凌OK3588-C的核心板刷Rockchip原厂的Buildroot并挂载1TB的exFAT格式的TF卡
fdisk -l df -h df -t df -T mount 20240821给飞凌OK3588-C的核心板刷Rockchip原厂的Buildroot并挂载1TB的exFAT格式的TF卡 2024/8/21 18:06 【切记,对于Rockchip原厂的Buildroot,如果你没有针对性的适配DTS:修改其中的GPIO口供电,…...
![](https://i-blog.csdnimg.cn/direct/70603bf92a944cbb8d02bac57d331ba9.png)
多模态学习Multimodal Learning:人工智能中的多模态原理与技术介绍初步了解
多模态学习(Multimodal Learning)是机器学习中的一个前沿领域,旨在综合处理和理解来自不同模态的数据。模态可以包括文本、图像、音频、视频等。随着数据多样性和复杂性增加,多模态学习在自然语言处理、计算机视觉、语音识别等领域…...
![](https://i-blog.csdnimg.cn/direct/a10d431cf5584f1292be664ca20eca40.png)
外部环境连接kafka
修改配置文件外部环境连接kafka 1、kafka的docker官方镜像地址2、kafka官方介绍的三种连接方式3、方式一:Default configs默认配置4、方式二:File input(文件输入:外部配置文件替换docker容器内的配置文件)4.1、首先查…...
![](https://www.ngui.cc/images/no-images.jpg)
结合了MySQL数据库、Elasticsearch和Redis,构建一个产品搜索和推荐系统
1. 数据库设置(MySQL) 首先,我们需要创建两个表来存储产品信息和产品类别信息。 CREATE DATABASE product_system;USE product_system;CREATE TABLE categories (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,created_at…...
![](https://img-blog.csdnimg.cn/img_convert/c90d1abbd608623aea50060813ab0779.jpeg)
白酒与素食:健康与美味的双重享受
在美食的世界里,白酒与素食的搭配仿佛是一场跨界的盛宴。豪迈白酒(HOMANLISM)的醇香与精致素食的清新,在不经意间交织出了一幅美妙的画卷,让人在品味中感受到健康与美味的双重享受。 素食,以其清淡、自然的…...
![](https://i-blog.csdnimg.cn/direct/cd15e8266075404da199fde8aa96e538.jpeg)
工厂现场多功能帮手,三防平板改善管理体验
随着制造业的智能化变革,信息化、自动化和智能化逐渐成为工厂管理的新常态。在这一波技术浪潮中,三防平板作为一种多功能的工作工具,正在逐步改善工厂现场的管理体验。 一、三防平板的定义与特点 三防平板,顾名思义,是…...
![](https://www.ngui.cc/images/no-images.jpg)
【git】问题解决---Failed to connect to github.com
场景 最近运行命令git push,git pull或者git clone的时候总会报如下错误 fatal: unable to access https://github.com/xxxxx/xxxxxx.git/: **Failed to connect to github.com** port 443 after 21052 ms: Couldnt connect to server原因 一般是网络配置原因造成的, 如果能…...
![](https://www.ngui.cc/images/no-images.jpg)
Java 中 String 类型的特点
在 Java 中,String 是一种常用且重要的数据类型,用于表示和处理字符序列。它有一些独特的特性和用法,使得它在开发中非常灵活和高效。以下是关于 String 类型的一些特点、特殊性、使用技巧以及注意事项。 1. String 的特点 1.1 不可变性 定…...
![](https://www.ngui.cc/images/no-images.jpg)
AddressUtils 、RegionUtils IP地址工具类
一、类展示 AddressUtils : /*** 获取地址类**/ Slf4j NoArgsConstructor(access AccessLevel.PRIVATE) public class AddressUtils {// 未知地址public static final String UNKNOWN "XX XX";public static String getRealAddressByIP(String ip) {i…...
![](https://www.ngui.cc/images/no-images.jpg)
牛客网SQL进阶134: 满足条件的用户的试卷总完成次数和题目总练习次数
满足条件的用户的试卷完成数和题目练习数_牛客题霸_牛客网 0 问题描述 基于用户信息表user_info、试卷信息表examination_info、试卷作答记录表exam_record、题目练习记录表practice_record,筛选出 高难度SQL试卷得分平均值大于80并且是7级的用户,统计他…...
![](https://i-blog.csdnimg.cn/direct/4a3d32be30094b49bcbf8d1b880549ca.png)
机器学习:逻辑回归处理手写数字的识别
1、获取数据, 图像分割该数据有50行100列,每个数字占据20*20个像素点,可以进行切分,划分出训练集和测试集。 import numpy as np import pandas as pd import cv2 imgcv2.imread("digits.png")#读取文件 graycv2.cvtColor(img,cv2.COLOR_BGR2G…...
![](https://i-blog.csdnimg.cn/direct/baf6a038b50743d58b9b853d35fb39d5.png)
文件上传真hard
一、SpringMVC实现文件上传 1.1.项目结构 1.1.2 控制器方法 RequestMapping("/upload1.do")public ModelAndView upload1(RequestParam("file1") MultipartFile f1) throws IOException {//获取文件名称String originalFilename f1.getOriginalFilename(…...
![](https://img-blog.csdnimg.cn/img_convert/87d072cb0f1d4948eebc4a6f883a9e9f.webp?x-oss-process=image/format,png)
精益管理|介绍一本专门研究防错法(Poka-Yoke)的书
在现代制造业中,如何确保产品在每个生产环节中不出现错误是企业追求的目标之一。而实现这一目标的关键技术之一就是防错法(Poka-Yoke)。作为一种简单而有效的精益管理、六西格玛管理工具,防错法帮助企业避免因人为错误或工艺不当导…...
![](https://i-blog.csdnimg.cn/direct/475753d2404f4a7ebe2c710f6077578c.png)
面试题目:(4)给表达式添加运算符
目录 题目 代码 思路解析 例子 题目 题目 给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)、- 或 * ,返回 所有能够得到 target 的表达式。1 < num.length &…...
![](https://www.ngui.cc/images/no-images.jpg)
[C#]将opencvsharp的Mat对象转成onnxruntime的inputtensor的3种方法
第一种方法:在创建tensor时候直接赋值改变每个tensor的值,以下是伪代码: var image new Mat(image_path);inpWidth image.Width;inpHeight image.Height;//将图片转为RGB通道Mat image_rgb new Mat();Cv2.CvtColor(image, image_rgb, Col…...
![](https://i-blog.csdnimg.cn/direct/4691c8500e89454c80e1a7c38104dc24.png)
CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了!
一、CTF简介 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。…...
![](https://i-blog.csdnimg.cn/direct/b326dd9ce52d4c619c5a4d68601d9aec.png)
数据链路层 I(组帧、差错控制)【★★★★★】
(★★)代表非常重要的知识点,(★)代表重要的知识点。 为了把主要精力放在点对点信道的数据链路层协议上,可以采用下图(a)所示的三层模型。在这种三层模型中,不管在哪一段…...
![](https://img-blog.csdnimg.cn/img_convert/5f79574c5acf639596609bebfd9a9690.png)
悟空降世 撼动全球
文|琥珀食酒社 作者 | 积溪 一只猴子能值多少钱? 答案是:13个小目标 这两天 只要你家没有断网 一定会被这只猴子刷屏 它就是咱国产的3A游戏 《黑神话:悟空》 这只猴子到底有多火? 这么跟你说吧 茅台见了它都…...
![](https://www.ngui.cc/images/no-images.jpg)
Swoole 和 Java 哪个更有优势呢
Swoole 和 Java 各有优势,在性能上不能简单地说哪一个更好,需要根据具体的应用场景来分析。 Swoole 优势:高并发:Swoole 是一个基于 PHP 的异步、协程框架,专为高并发场景设计,适用于 I/O 密集型应用&…...
![](http://hi.csdn.net/attachment/201111/29/0_13225897779Ru8.gif)
ddns做网站/今天刚刚发生的新闻
eclipse在tomcat运行自己的网页程序 Run on Server时发现RT错误 解决办法: Windows ->Show View -> Servers 在 Servers View 里删除相应的 Server 然后再Run on Server,就可以了 转载于:https://www.cnblogs.com/forgeting/p/4382952.html...
中铁建设集团官方网站/seo服务顾问
问题描述:要在有限的时间内安排尽量多的会议。 贪心策略(前提是会议不冲突,也就是两个会议不同时进行): 1. 每次选择持续时间最短的安排。这样如果开始时间很迟,安排的会议也很少,所以策略不是…...
![](/images/no-images.jpg)
做加盟网站哪个最好/网络舆情分析报告
由不勤劳的图书管理员带入了分块的坑,深深地被其暴力与优雅所征服。分块的实质就是将暴力块状封装起来,一整块的部分就一整块处理,零碎的部分就怎么暴力怎么来。因为分块大小的原因,限制了零碎部分数据的数量级,所以复…...
![](/images/no-images.jpg)
wap网站有哪些/深圳全网推互联科技有限公司
https://segmentfault.com/a/1190000013822385转载于:https://www.cnblogs.com/EricZ-Blog/p/10817168.html...
![](https://img-blog.csdnimg.cn/img_convert/80b5881ddd3d8b247d06fe318ad9e54d.png)
青岛正规的网站建设公司/seogw
原因很简单:win7,win8,WIN10自带了.net framework 4.6,版本比framework 4.5新了一点。而CAD2015的语言包(AutoCAD 2015 Language Pack)在安装中只能识别net framework 4.5,所以安装失败。CAD2015主程序没有问题,AutoCAD官方安装包…...
如何用手机制作网站/seo是干啥的
Python整理环境搭建,不仅仅包括Python版本的安装,还包括Python命令行,setuptools安装,和工作环境配置等. 1. Python版本的安装 Python的安装 >>> Windows下的安装,配置挺简单,稍微注意点的是,PA…...