0726,没什么用的SELECT和没用的我

目录

select 可恶!!!

一对多聊天室  select:(抄抄抄

最怕人类开始思考

补一对一的 select  喵:(抄抄抄 

??今天就这么结束了???

bit -->  type  -->  kilobite8         1024

select 可恶!!!

//select fd_set  //位图数组void FD_CLR(int fd,fd_set *set);
int FD_ISSET(int fd,fd_set* set);  //检查文件描述符 fd 是否在 set 中设置
void FD_SET(int fd,fd_set* set)    //将文件描述符 fd 加入到 set 中,以便将其监视
void FD_ZERO(fd_set * set)int select (int nfds,fd_set *readfd,fd_set* writefds,fd_set *exceptfds,
struct timeval *timeout);
___(maxfd+1,num/NULL,num/NULL,num/NULL,NULL(无限制等待));
一对多聊天室  select:(抄抄抄
//sel_kai.c
#include <func.h>
#define IP1  "192.168.235.128"
#define PORT1 8080int main()
{struct sockaddr_in addr;addr.sin_family=AF_INET;addr.sin_port=htons(PORT1);addr.sin_addr.s_addr=inet_addr(IP1);int listener=socket(AF_INET,SOCK_STREAM,0);int ret=bind(listener,(struct sockaddr*)&addr,sizeof(struct sockaddr));if(ret==-1){error(1,errno,"bind");}ret=listen(listener,100);int ac_fd[100];int ac_num=0;   //xuyao监听的文件描述符数量char buff[256];char buff_sent[256];fd_set readfds;  //监听集合FD_ZERO(&readfds);FD_SET(listener,&readfds);  //listener加入监听int fd_max=listener;       //监听的最大文件描述符fd_set old_fds=readfds;   //要监听的文件描述符(专一!!!)printf("Listening\n");while(1){readfds=old_fds;select(fd_max+1,&readfds,NULL,NULL,NULL);if(FD_ISSET(listener,&readfds)){ac_fd[ac_num]=accept(listener,NULL,NULL);FD_SET(ac_fd[ac_num],&old_fds);if(ac_fd[ac_num]>fd_max){fd_max=ac_fd[ac_num];}ac_num++;printf("wellcome user:%d,\n",ac_fd[ac_num-1]);}for(int i=0;i<ac_num;i++){if(FD_ISSET(ac_fd[i],&readfds)){int a=recv(ac_fd[i],buff,256,0);if(a==0){close(ac_fd[i]);}sprintf(buff_sent,"user%d:%s",ac_fd[i],buff);for(int j=0;j<ac_num;j++){send(ac_fd[j],buff_sent,strlen(buff_sent)+1,0);}}}}return 0;
}

//sel_kai_c.c
#include <func.h>
#define PORT1 8080
#define IP1  "192.168.235.128"int main()
{struct sockaddr_in addr;addr.sin_family=AF_INET;addr.sin_port=htons(PORT1);addr.sin_addr.s_addr=inet_addr(IP1);int fd=socket(AF_INET,SOCK_STREAM,0);int ret=connect(fd,(struct sockaddr*)&addr,sizeof(struct sockaddr));if(ret==-1){error(1,errno,"bind");}fd_set readfds;fd_set old_fds;int fd_max;FD_ZERO(&readfds);fd_max=STDIN_FILENO;FD_SET(fd,&readfds);if(fd_max<fd){fd_max=fd;}char buff[256];old_fds=readfds;while(1){readfds=old_fds;select(fd_max+1,&readfds,NULL,NULL,NULL);if(FD_ISSET(STDIN_FILENO,&readfds)){fgets(buff,256,stdin);send(fd,buff,strlen(buff)+1,0);}if(FD_ISSET(fd,&readfds)){int n=recv(fd,buff,256,0);if(n==0){error(1,errno,"connect break");}printf("%s\n",buff);}}return 0;
}

牛逼极了但是我十分迷惑,应该是有输出的吧???但是没跑出来喵

最怕人类开始思考
————————————————client.c
✗  46 ---addr          47 socket  connect  (fd) 48                  49 readfds  old_fds   fd_max  buff[]50                  51 FD_SET(fd,&readfds);
✗  52 while(1){        53         readfds=old_fds;54         select(fd_max+1,&readfds,NULL,NULL,NULL);55         if(FD_ISSET(STDIN_FILENO,&readfds)){56             fgets; send;57         }//stdin是否有读入58         if(FD_ISSET(fd,&readfds)){59             recv; printf;60         }//fd是否有传输61 62 }   ————————————————server.c
✗  57 --addr58 socket --> bind --> listen  (listener)59 60 --ac_fd[]          ac_num         buff[] buff_sent[]61 已连接描述符集合   当前监听数量   缓冲数组                                62 --readfds         old_fds            fd_max63 需要监听的fd    初始需要监听的fd   最大的fd64 65 FD_SET(listener,&readfds);
✗  66 while(1){67         readfds=old_fds;68         select    //监视文件描述符中套接字的变化69         if(FD_ISSET(listener,&readfds)){70             accept --> FD_SET  //接收,设置监视
✗  71             (ac_fd[]  ac_num  fd_max  old_fds) //更新信息72         }//开哥!说,有新链接来的时候就是,listener的读缓冲区73          //有东西喵,监听到读事件发生???就不阻塞了74          //我怎么一分钟过去就又迷惑了,好好好,不敢冒头了75         for(int i=0;i<ac_num;i++){76             if(FD_ISSET(ac_fd[i],&readfds)){77                 recv,if (recv)==0--close,buff[]-->buff_sent[]78             }//接收,根据字符数目判断是否断开               79             for(int j=0;j<ac_num;j++){80                 send(buff_sent[])81             }82         }83 }/*
想起来了喵,bind是 addr & fd  绑定
要把服务器的端口(addr)暴露给客户端,但是客户端的端口是随机分配的
绑定之后,addr就可以通过fd接收数据了,所以!!!if(FD_ISSET(listener,&readfds))
*/
聪明小辉聪明小辉聪明小辉聪明小辉聪明小辉聪明小辉聪明小辉聪明小辉聪明小辉聪明小辉聪明小辉
补一对一的 select  喵:(抄抄抄 
————————————————client.c
--addr
socket --> connect   (clientfd)--rdset buff[]while(1){
FD_SET(clientfd,&rdset)
FD_SET(STDIN_FILENO,&rdset)
selectif(FD_ISEET(STDIN_FILENO,&rdset))
{ read; send; }
if(FD_ISEET(clientfd,&rdset))
{ recv; printf; }}close————————————————server.c     //我猜的,好像没抄过一对一的服务器,问题不大
--addr
socket --> bind -->  listen   (fd)--rdset buff[]if(FD_ISEET(STDIN_FILENO,&rdset))
{ read; send; }
if(FD_ISEET(fd,&rdset))
{ recv; printf; }}close

??今天就这么结束了????

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

CTF-NSSCTF[GKCTF 2021]

[GKCTF 2021]easycms 考察&#xff1a; 用扫描工具扫描目录&#xff0c;扫描到后台登录界面/admin.php 题目提示了密码是五位弱口令&#xff0c;试了试弱口令admin和12345直接成功了 任意文件下载 点击设计-->主题然后随便选择一个主题&#xff0c;点击自定义&#xff0…

队列--顺序队列的表示和实现

#include<stdio.h> #define MAXQSIZE 10 typedef int QElemType; typedef int Status; //顺序队列 (循环队列,有一个空间不用) typedef struct{QElemType *base;int rear;int front; }SqQueue; //初始化队列 Status InitQueue(SqQueue &Q){Q.basenew QElemType[MAX…

MAC地址格式批量转换工具V1.0适用于Windows系统

自己做了个MAC地址格式批量转换工具&#xff0c;方便实用。 一、主要实现下面6种功能&#xff1a; MAC格式&#xff0c;如“AC-09-87-DB-E9-F0”转“AC09-87DB-E9F0” MAC格式&#xff0c;如“AC09-87DB-E9F0”转“AC-09-87-DB-E9-F0” MAC格式&#xff0c;如“AC-09-87-DB-…

Laravel:揭秘PHP世界中最优雅的艺术品

1. 引言 在PHP的世界里&#xff0c;框架如繁星般璀璨&#xff0c;但Laravel以其独特的魅力和优雅&#xff0c;成为了众多开发者心中的艺术品。本文将深入探讨Laravel为何能在众多PHP框架中脱颖而出&#xff0c;成为最优雅的选择。 1.1 Laravel的诞生背景 Laravel的诞生可以…

高清视频,无损音频,LDR6023——打造极致视听与高效充电的双重享受!

Type-C PD&#xff08;Power Delivery&#xff09;芯片是一种支持USB Type-C接口规范的电源管理单元&#xff0c;其主要功能包括&#xff1a; 快速充电&#xff1a;Type-C PD芯片支持高功率传输&#xff0c;能够提供更快的充电速度&#xff0c;使电子设备在短时间内充满电&…

用Postman Flows打造你的专属API:外部公开,轻松上手!

引言 Postman Flows 是一个使用 GUI 进行无代码 API 调用流程创建的服务。这篇文章我尝试使用 Flows 来构建将 Momento Topic 中的数据保存到 TiDB 的保存 API&#xff0c;因此想分享一些使用过程中的技巧等。 实现内容 将从 Momento Topics 配发的 JSON 数据保存到 TiDB 中。…

论文复述:AGTC

论文: Attention-Guided Low-Rank Tensor Completion, 作者为Truong Thanh Nhat Mai, Edmund Y. Lam and Chul Lee.

04。拿捏ArkTS第二天

1&#xff0c;什么是常量&#xff1f; 用来存储不可变的数据。 2&#xff0c;定义常量的基本样式&#xff1f; const con : number 1 const con : string ”我是不可变的字符串“ const con : boolean false ***********************************************************…

我在高职教STM32——串口通信(5)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思的教学设计分享…

WordPress设置固定连接后提示404

WordPress设置固定链接后出现404错误通常是因为服务器的伪静态规则没有正确设置。以下是几种常见的服务器环境下的解决方案&#xff1a; 宝塔面板&#xff1a;如果服务器安装了宝塔面板&#xff0c;可以在宝塔面板中选择对应的WordPress伪静态规则并保存设置 。 Apache服务器&a…

nacos 2.4.0.1 源码编译,适配达梦dm数据库

一、编译nacos源码&#xff0c;并运行 1. 下载nacos代码 github nacos 仓库地址&#xff1a;nacos 本文以2.4.0.1演示&#xff0c;github操作如下 选择Tags 2.4.0.1 解压nacos-2.4.0.1.zip到nacos-2.4.0.1&#xff0c;并用idea打开 2. 编译代码 maven clean install 如果…

使用大型语言模型进行文档解析(附带代码)

动机 多年来&#xff0c;正则表达式一直是我解析文档的首选工具&#xff0c;我相信对于许多其他技术人员和行业来说也是如此。 尽管正则表达式在某些情况下功能强大且成功&#xff0c;但它们常常难以应对现实世界文档的复杂性和多变性。 另一方面&#xff0c;大型语言模型提供了…

智能合约在能源行业中的应用:促进可再生能源的发展与利用

随着全球能源需求的增长和环境保护意识的提升&#xff0c;可再生能源作为替代传统能源的重要选择&#xff0c;正逐步成为能源供应的主流。本文将探讨智能合约在能源行业中的应用&#xff0c;特别是如何通过智能合约促进可再生能源的发展与利用。 可再生能源的重要性与挑战 可再…

使用图数据库Nebula Graph快速上手史上最大规模的中文知识图谱ownthink_v2教程(没写完,明天再写)

一、前言 本教程主要参考官方教程&#xff1a;使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink (nebula-graph.com.cn) 来带着大家一步一步复现实验内容。 本教程主要使用到的数据集&#xff1a; ownthink/KnowledgeGraphData: 史上最大规模1.4亿中文知识图谱…

前端开发知识-vue

大括号里边放键值对&#xff0c;即是一个对象。 一、vue可以简化前端javascript的操作。 主要特点是可以实现视图、数据的双向绑定。 使用vue主要分为三个步骤&#xff1a; 1.javascript中引入vue.js 可以src中可以是vue的网址&#xff0c;也可以是本地下载。 2.在javasc…

昇思25天学习打卡营第三十四天|Jack578

昇思25天学习打卡营第三十四天|Jack578 一、数据集Dataset&#xff08;一&#xff09;数据集加载&#xff08;二&#xff09;数据集迭代&#xff08;三&#xff09;数据集常用操作 一、数据集Dataset 数据是深度学习的基础&#xff0c;MindSpore提供基于Pipeline的数据引擎&am…

Javascript前端面试基础5【每日更10】

let与var的区别 let命令不存在变量提升&#xff0c;如果在let前使用&#xff0c;会导致报错&#xff08;var存在变量提升&#xff09;如果块区中存在let和const命令&#xff0c;就会形成封闭作用域不允许重复声明&#xff0c;因此&#xff0c;不能在函数内部重新声明参数 m…

springboot中使用knife4j访问接口文档的一系列问题

springboot中使用knife4j访问接口文档的一系列问题 1.个人介绍 &#x1f389;&#x1f389;&#x1f389;欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的…

学习Java的日子 Day56 数据库连接池,Druid连接池

Day56 1.数据库连接池 理解&#xff1a;池就是容器&#xff0c;容器中存放了多个连接对象 使用原因&#xff1a; 1.优化创建和销毁连接的时间&#xff08;在项目启动时创建连接池&#xff0c;项目销毁时关闭连接池&#xff09; 2.提高连接对象的复用率 3.有效控制项目中连接的…

C++初阶学习第四弹——类与对象(中)

目录 一. 类的默认成员函数 二.六种默认成员函数 1、构造函数 1.1 构造函数的作用 1.2 特性 1.3 默认构造函数 2、析构函数 2.1 析构函数的作用 2.2 析构函数的用法 3、拷贝构造函数 3.1 拷贝构造函数的作用 3.2 特征 3.3 默认拷贝构造函数 三.总结 类与对象&…