国庆第二天
#include<th.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__",__LINE__);\perror(msg);\
}while(0)#define PORT 6666
#define IP "192.168.2.3"//键盘输入事件
int serverkeyboard(fd_set readfds)
{char buf[128] = "";int sndfd = -1;bzero(buf,sizeof(buf));int res = scanf("%d %s",&sndfd,buf);while(getchar() != 10);if(res != 2) //终端输入的数据格式错误{printf("输入数据的格式错误,: fd string\n");return -1;}if(sndfd <= 2 || FD_ISSET(sndfd,&readfds) == 0){printf("非法的文件描述符: sndfd = %d\n",sndfd);return -1;}if(send(sndfd,buf,sizeof(buf),0) < 0){ERR_MSG("send error");return -1;}printf("send success\n");return 0;
}//客户端连接事件
int clientconnection(int sfd,struct sockaddr_in saveCin[],fd_set *preadfds,int *pmaxfd)
{int newfd = -1;struct sockaddr_in cin;socklen_t addrlen = sizeof(cin);newfd = accept(sfd,(struct sockaddr*)&cin,&addrlen);if(newfd < 0){ERR_MSG("accept error");return -1;}printf("[%s:%d]客户端连接成功 newfd = %d\n",\inet_ntoa(cin.sin_addr),\ntohs(cin.sin_port),\newfd);saveCin[newfd] = cin; //将cin另存到newfd对应的下标位置去FD_SET(newfd,preadfds); //将newfd添加到集合中*pmaxfd = *pmaxfd > newfd ? *pmaxfd : newfd; //更新maxfdreturn 0;
}//客户端交互事件
int clientsr(int fd,struct sockaddr_in * saveCin, fd_set *preadfds,int * pmaxfd)
{char buf[128] = "";bzero(buf,sizeof(buf));//接收ssize_t res = recv(fd,buf,sizeof(buf),0);if(res < 0){ERR_MSG("recv error");return -1;}else if(0 == res){printf("[%s:%d]客户端下线 newfd = %d\n",\inet_ntoa(saveCin[fd].sin_addr),\ntohs(saveCin[fd].sin_port),fd);close(fd);FD_CLR(fd,preadfds); //将下线的文件描述符踢出集合//由于踢出的文件描述符可能是最大的文件描述符//所以需要更新maxfd/** for(; *pmaxfd >= 0; *pmaxfd--)* {* if(FD_ISSET(*pmaxfd,preadfds))* {* break;* }*/while(FD_ISSET(*pmaxfd,preadfds) == 0 && (*pmaxfd)-- >= 0);return 0;}printf("[%s:%d] newfd = %d : %s\n",\inet_ntoa(saveCin[fd].sin_addr),\ntohs(saveCin[fd].sin_port),fd,buf);//发送strcat(buf,"*_*");if(send(fd,buf,sizeof(buf),0) < 0){ERR_MSG("send error");return -1;}printf("send success\n");return 0;
}int main(int argc, const char *argv[])
{int sfd;sfd = socket(AF_INET,SOCK_STREAM,0);if(sfd < 0){ERR_MSG("socket error");return -1;}//允许端口被快速复用int reuse = 1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) < 0){ERR_MSG("setsockopt error");return -1;}printf("允许端口被快速复用成功\n");//填充服务器信息结构体struct sockaddr_in sin; //创建服务器地址信息结构体sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);socklen_t serveraddrlen = sizeof(sin);if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) < 0){ERR_MSG("bind error");return -1;}printf("服务器信息结构体绑定成功\n");if(listen(sfd,128) < 0){ERR_MSG("listen error");return -1;}printf("服务器监听成功\n");//创建一个读集合fd_set readfds,tempfds;FD_ZERO(&readfds);//将需要监测的文件描述符添加到集合中FD_SET(0,&readfds);FD_SET(sfd,&readfds);int maxfd = sfd; //存储最大的文件描述符int s_res = -1;ssize_t res = -1;char buf[128] = "";//储存连接成功的客户端的地址信息,用下标来对应文件描述符struct sockaddr_in saveCin[1024];while(1){tempfds = readfds;s_res = select(maxfd + 1, &tempfds,NULL,NULL,NULL);if(s_res < 0){ERR_MSG("select error");return -1;}else if(0 == s_res){printf("time out,,\n");break;}printf("__%d__\n",__LINE__);for(int i = 0; i < maxfd; i++){if(FD_ISSET(i,&tempfds) == 0){continue;}if(0 == i) //键盘输入事件{printf("触发键盘输入事件\n");serverkeyboard(readfds);}else if(sfd == i){printf("触发客户端连接事件\n");clientconnection(sfd,saveCin,&readfds,&maxfd);}else{printf("触发客户端交互事件\n");clientsr(i,saveCin,&readfds,&maxfd);}}}if(close(sfd) < 0){ERR_MSG("close error");return -1;}return 0;
}
相关文章:
国庆第二天
#include<th.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__",__LINE__);\perror(msg);\ }while(0)#define PORT 6666 #define IP "192.168.2.3"//键盘输入事件 int serverkeyboard(fd_set readfds) {char buf[128] "";int sndfd -…...
Java安全之servlet内存马分析
目录 前言 什么是中间键 了解jsp的本质 理解servlet运行机制 servlet的生命周期 Tomcat总体架构 查看Context 的源码 servlet内存马实现 参考 前言 php和jsp一句话马我想大家都知道,早先就听小伙伴说过一句话木马已经过时了,现在是内存马的天下…...
2023年第二十届中国研究生数学建模竞赛总结与分享
今天是国庆节,祝祖国繁荣富强。正好也学习不下去,就想着写写博客,总结一下自己在参加2023年第20届中国研究生数学建模比赛的一些感受。 目录 1.基本介绍 2.比赛分享 1.基本介绍 1. 竞赛时间:竞赛定于2023年9月22日8:00至2023年9…...
Web前端-Vue2+Vue3基础入门到实战项目-Day1(初始Vue, Vue指令, 小黑记事本)
Web前端-Vue2Vue3基础入门到实战项目-Day1 Vue快速上手创建一个Vue实例插值表达式Vue响应式特性 Vue指令指令初识 和 v-htmlv-show 和 v-ifv-else 和 v-else-ifv-on内联语句methods处理函数调用传参 v-bind案例 - 波仔的学习之旅v-forv-for基本使用案例 - 小黑的书架v-for的key…...
Sentinel学习(2)——sentinel的使用,引入依赖和配置 对消费者进行流控 对生产者进行熔断降级
前言 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 本篇博客介绍sentinel的使用&#x…...
springboot 简单配置mongodb多数据源
准备工作: 本地mongodb一个创建两个数据库 student 和 student-two 所需jar包: # springboot基于的版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>&l…...
西门子S7-1200使用LRCF通信库与安川机器人进行EthernetIP通信的具体方法示例
西门子S7-1200使用LRCF通信库与安川机器人进行EthernetIP通信的具体方法示例 准备条件: PLC:S7-1200 1214C DC/DC/DC 系统版本4.5及以上。 机器人控制柜:安川YRC1000。 软件:TIA V17 PLC做主站,机器人做从站。 具体方法可参考以下内容: 使用的库文件为西门子 1200系列…...
pytorch第一天(tensor数据和csv数据的预处理)lm老师版
tensor数据: import torch import numpyx torch.arange(12) print(x) print(x.shape) print(x.numel())X x.reshape(3, 4) print(X)zeros torch.zeros((2, 3, 4)) print(zeros)ones torch.ones((2,3,4)) print(ones)randon torch.randn(3,4) print(randon)a …...
CSP-J第二轮试题-2021年-1.2题
文章目录 参考:总结 [CSP-J 2021] 分糖果题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 样例 #3样例输入 #3样例输出 #3 提示答案1答案2-优化 [CSP-J 2021] 插入排序题目描述输入格式输出格式样例 #1样例输入 #1样…...
怒刷LeetCode的第16天(Java版)
目录 第一题 题目来源 题目内容 解决方法 方法一:迭代 方法二:模拟 方法三:循环模拟 方法四:传递 第二题 题目来源 题目内容 解决方法 方法一:回溯 方法二:枚举优化 第三题 题目来源 题目…...
让大脑自由
前言 作者写这本书的目的是什么? 教会我们如何让大脑更好地为自己工作。 1 大脑的运行机制是怎样的? 大脑的基本运行机制是神经元之间通过突触传递信息,神经元的兴奋和抑制状态决定了神经网络的运行和信息处理,神经网络可以通过…...
Arcgis克里金插值报错:ERROR 010079: 无法估算半变异函数。 执行(Kriging)失败。
Arcgis克里金插值报错:ERROR 010079: 无法估算半变异函数。 执行(Kriging)失败。 问题描述: 原因: shape文件的问题,此图可以看出,待插值的点有好几个都超出了地理范围之外,这个不知道是坐标系配准的问…...
Docker Compose安装
title: “Docker Compose安装” createTime: 2022-01-04T19:08:1508:00 updateTime: 2022-01-04T19:08:1508:00 draft: false author: “name” tags: [“docker”,“docker-compose”] categories: [“install”] description: “测试的” docker-compose安装步骤 1.下载 u…...
机器人过程自动化(RPA)入门 7. 处理用户事件和助手机器人
在UiPath中,有两种类型的Robot用于自动化任何流程。一个是后台机器人,它在后台工作。它独立工作,这意味着它不需要用户的输入或任何用户交互。另一个是前台机器人,也被称为助理机器人。 本章介绍前台机器人。在这里,我们将了解自动化过程中通过简单按键、单击鼠标等触发事…...
在linux下预览markdown的方法,转换成html和pdf
背景 markdown是一种便于编写和版本控制的格式,但却不便于预览——特别是包含表格等复杂内容时,单纯的语法高亮是远远不够的——这样就不能边预览边调整内容,需要找到一种预览方法。 思路 linux下有个工具,叫pandoc,…...
AIOT入门指南:探索人工智能与物联网的交汇点
AIOT入门指南:探索人工智能与物联网的交汇点 1. 引言 随着技术的快速发展,人工智能(AI)和物联网(IoT)已经成为当今最热门的技术领域。当这两个领域交汇时,我们得到了AIOT - 一个结合了AI的智能…...
CCC数字钥匙设计【NFC】 --车主配对流程介绍
1、车主配对流程介绍 车主配对流程可以通过车内NFC进行,若支持UWB测距,也可以通过蓝牙/UWB进行,本文主要介绍通过NFC进行车主配对的流程。 整个配对流程相对较为复杂,本文主要梳理整体的步骤流程,其中的每个细节流程未…...
一站式开源持续测试平台 MerterSphere 之测试跟踪操作详解
一、MeterSphere平台介绍 MeterSphere是一站式的开源持续测试平台,遵循 GPL v3 开源许可协议,涵盖测试跟踪、接口测试、UI 测试和性能测试等功能,全面兼容JMeter、Selenium 等主流开源标准,有效助力开发和测试团队充分利用云弹性进…...
自然语言处理状况简介
一、说明 自然语言处理已经进入大模型时代,然而从业人员必须了解整个知识体系、发展过程、知识结构,应用范围等一系列知识。本篇将报道此类概况。 二、自然语言处理简介 自然语言处理,或简称NLP,是处理和转换文本的计算机科学学科…...
python爬虫基于管道持久化存储操作
文章目录 基于管道持久化存储操作scrapy的使用步骤1.先转到想创建工程的目录下:cd ...2.创建一个工程3.创建之后要转到工程目录下4.在spiders子目录中创建一个爬虫文件5.执行工程setting文件中的参数 基于管道持久化存储的步骤:持久化存储1:保…...
LRCGET:如何一键批量下载本地音乐歌词的终极指南
LRCGET:如何一键批量下载本地音乐歌词的终极指南 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否厌倦了为每一首本地音乐手动寻找歌词…...
2026年电工杯A 题 绿电直连型电氢氨园区优化运行【思路、Python代码、Matlab代码、论文(持续更新中......)】
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
【Game】Powerful——Martial Arts Challenge(6)
文章目录攻略关卡一(虎子)关卡二关卡三关卡四关卡五关卡六——奇穷妖魔羽灵火地仙人雷攻略 关卡一(虎子) 参战选手 出手顺序 关卡二 参战选手 出手顺序 关卡三 参战选手 出手顺序 上面是追求极限,但是没有容错率&…...
大规模矩阵SVD与GSVD计算方法【附代码】
✨ 长期致力于办公建筑设计、建筑能耗、光性能、热性能、modeFRONTIER、多目标优化、性能模拟、寒冷地区研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1ÿ…...
uView 2.0性能优化终极秘籍:按需引入与打包体积精简完整教程
uView 2.0性能优化终极秘籍:按需引入与打包体积精简完整教程 【免费下载链接】uView2.0 uView UI,是全面兼容nvue的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水 项目地址: https://gitcode.com/gh_mirrors/…...
在Windows通知栏悄悄学习:ToastFish让你的碎片时间变成单词记忆神器
在Windows通知栏悄悄学习:ToastFish让你的碎片时间变成单词记忆神器 【免费下载链接】ToastFish 一个利用摸鱼时间背单词的软件。 项目地址: https://gitcode.com/GitHub_Trending/to/ToastFish 想象一下这样的场景:你正在办公室里忙碌地处理文件…...
Behavioral面试最致命的送命题:如何将“谈谈你最惨痛的失败”逆袭为大厂加分项
在 2026 年全球科技大厂与顶尖金融机构的校招与社招面试中,无论是硅谷某头部科技巨头、北美量化基金大厂,还是亚太 Tier-1 金融机构,Behavioral Question(行为面试,简称 BQ)在最终录用决定(Hiri…...
ToastFish:Windows通知栏背单词神器,碎片化时间高效记忆方案
ToastFish:Windows通知栏背单词神器,碎片化时间高效记忆方案 【免费下载链接】ToastFish 一个利用摸鱼时间背单词的软件。 项目地址: https://gitcode.com/GitHub_Trending/to/ToastFish ToastFish是一款创新的Windows桌面应用程序,专…...
工业 CAN 通信利器!六通道隔离集线器,中继滤波稳组网
工业 CAN 总线距离受限、速率不匹配、数据拥堵、故障难排查?三格电子SG-CanHub-600 六通道 CAN 集线器,工业级隔离中继,信号再生 智能滤波,轻松解决 CAN 网络通信难题!⚙️ 硬核实力,工业通信强支撑✅ 六通…...
Delft3D建模、水动力模拟方法及地表水环境影响评价:岸线绘制与导入、非结构化计算网格生成、水下地形数据处理等前处理操作;水动力与污染物对流扩散模拟的参数设置、边界条件设定及模型率定验证
查看原文>>>https://mp.weixin.qq.com/s/_CiPDK_oXaAGxVfu2qk6ew 前言 本文以地表水数值模拟软件Delft3D 4.03.00操作为主要内容,强调地表水水动力建模、基础资料的获取、边界条件设定、模型率定和验证、数据分析和处理等关键环节。通过对案例模型的实操…...
