当前位置: 首页 > news >正文

网络编程,IO多路复用

 

1.使用IO多路复用完成TCP并发服务器

#include<myhead.h>
#define SER_PORT 8888                  //服务器端口号
#define SER_IP  "192.168.124.10"      //服务器IP地址int main(int argc, const char *argv[])
{//1、创建用于连接的套接字int sfd = socket(AF_INET, SOCK_STREAM, 0);  //参数1:通信域,表明使用的是ipv4协议//参数2:通信方式,使用TCP通信//参数3:0表示之前已经指定协议 IPPROTO_TCPif(sfd == -1){perror("socket error");return -1;}printf("sfd = %d\n", sfd);               //3//将端口号快速重用函数int reuse = 1;if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1){perror("setsockopt error");return -1;}printf("端口号快速重用成功\n");//2、给当前套接字绑定IP地址和端口号//2.1填充要绑定的地址信息结构体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地址//2.2 绑定if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) == -1){perror("bind error");return -1;}printf("bind success %s %s %d\n", __FILE__, __func__, __LINE__);//3、将套接字设置成监听状态if(listen(sfd, 128) == -1){perror("listen error");return -1;}printf("listen success %s %s %d\n", __FILE__, __func__, __LINE__);//4、阻塞等待客户端的链接请求//4.1定义容器接收客户端的地址信息struct sockaddr_in cin;                  //用于接收地址信息socklen_t socklen = sizeof(cin);          //用于接收地址信息的大小int newfd = -1;//11、准备一个文件描述符容器fd_set readfds, tempfds;          //22、清空容器FD_ZERO(&readfds);//33、将要检测的文件描述符放入集合FD_SET(0, &readfds);FD_SET(sfd, &readfds);//定义一个变量存储容器中最大的文件描述符int maxfd = sfd;//定义一个地址信息结构体数组,每一个元素对应一个客户端文件描述符struct sockaddr_in cin_arr[1024];while(1){tempfds = readfds;   //存储一份数据//使用select函数对容器中的文件描述符进行检测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 cli=0;cli<=maxfd;cli++){if(!FD_ISSET(cli,&tempfds)){continue;}if(cli == sfd){//4.2 接收客户端的链接newfd = accept(sfd, (struct sockaddr*)&cin, &socklen);   if(newfd == -1){perror("accept error");return -1;}printf("[%s:%d]发来链接请求 %s %s %d\n", \inet_ntoa(cin.sin_addr), ntohs(cin.sin_port),__FILE__, __func__, __LINE__);//更新地址信息结构体数组cin_arr[newfd] = cin;//将newfd放入readfds中FD_SET(newfd, &readfds);//更新maxfdif(newfd > maxfd){maxfd = newfd;}}else//判断0号文件描述符是否在集合中if(cli == 0){//终端输入char wbuf[128] = "";scanf("%s", wbuf);printf("触发了终端输入事件。。。\n");if(strcmp(wbuf, "quit") == 0){goto END;}//将消息发送给所有客户端for(int i=4; i<=maxfd; i++ ){sendto(i, wbuf, sizeof(wbuf), 0,(struct sockaddr*) &cin_arr[i], sizeof(cin_arr[i]));}}else{//5、跟客户端进行消息通信char buf[128] = "";//将数组清空bzero(buf, sizeof(buf));//读取客户端发来的消息//int res = read(newfd, buf, sizeof(buf));int res = recv(cli, buf, sizeof(buf), 0);if(res == 0){printf("客户端已经下线\n");//关闭当前通信的套接字close(cli);//将当前文件描述符从文件描述符集合中移除FD_CLR(cli, &readfds);//更新maxfdfor(int i=maxfd; i>=sfd; i--){if(FD_ISSET(i, &readfds)){maxfd = i;break;}}continue;}printf("[%s:%d] : %s\n", inet_ntoa(cin_arr[cli].sin_addr), ntohs(cin_arr[cli].sin_port), buf);//给客户端发消息strcat(buf, "*_*");//write(newfd, buf, sizeof(buf));send(cli, buf, sizeof(buf), 0);printf("发送成功\n");}}}END://6、关闭套接字close(sfd);return 0;}

相关文章:

网络编程,IO多路复用

1.使用IO多路复用完成TCP并发服务器 #include<myhead.h> #define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.124.10" //服务器IP地址int main(int argc, const char *argv[]) {//1、创建用于连接的套接字int sfd socket…...

【ue5】滑铲系统蓝图笔记

大致逻辑如下&#xff1a; 一、导入动画 滑铲蹲待机蹲行走 导入到文件夹中 可以右键设置颜色&#xff0c;便于区分。 二、调整动画 1.启动根运动 启动根运动后&#xff0c;人物才可以位移&#xff0c;不然只能在原地。 打开动画序列&#xff0c;勾选启用根运动Enabled…...

linux系统Jenkins工具参数化构建

Jenkins参数化构建 web服务器jenkins服务器编写主机清单编写脚本代码 jenkins服务web页面操作 web服务器 下载nginx 下载gitcd /usr/share/nginxrm -rf htmlgit clone http://root:Qq123456192.168.188.176/ximu/test-nginx.gitmv test-nginx/ htmljenkins服务器 下载ansible…...

生活里的英语应该【怎么说】

文章目录 一、生病的各种症状用英语怎么说&#xff1f;二、关于天气的英语怎么说&#xff1f; 一、生病的各种症状用英语怎么说&#xff1f; Im coughting! I have a sore throat. Ive lost my voice. I have a runny nose and a stuffy nose. I have shivers and a body a…...

Centos安装Jenkins

1、更新系统 &#xff08;1&#xff09;更新下系统 sudo yum -y update 安装用于下载java 17二进制文件的wget命令行工具 sudo yum -y install wget vim 2、卸载centos自带的jdk 由于我们安装的版本比较高&#xff0c;需要jdk17&#xff0c;卸载centos自带的jdk。用 下面的…...

软考中级系统集成必备100题(71-80)真题精炼

文章目录 71.简述配置管理的主要活动&#xff1f;72.配置管理和变更管理的区别&#xff1f;73.CMO的具体工作有哪些?74.配置标识的基本内容由哪些?75.配置审计包括哪些内容&#xff1f;76.配置审计的功能是什么?77.为什么要进行配置项的版本控制?78.简述配置项的版本控制流…...

visual studio的使用

文章目录 1.visual studio要加的宏命令2.清屏操作 1.visual studio要加的宏命令 #define _CRT_SECURE_NO_WARNINGS这是一个预处理器宏&#xff0c;它在 Visual Studio 中被广泛使用。其主要目的是禁用一些在 C 和 C 标准库中被认为不安全的函数的编译器警告。这些不安全的函数…...

对于爬虫的学习

本地爬取 package MyApi.a08regexdemo;import java.util.regex.Matcher; import java.util.regex.Pattern;public class RegexDemo03 {public static void main(String[] args) {//要求&#xff1a;找出里面所有javaxxString str"Java自从95年问世以来&#xff0c;经历了…...

【学习笔记】开源计算机视觉库OPENCV学习方案

本文中&#xff0c;我们试图提供一些学习OpenCV的详细和实用资源&#xff0c;这些资源包括基础知识、进阶技巧以及实践项目&#xff0c;旨在帮助初学者和进阶学习者更好地掌握和使用OpenCV库。 一、学习资源 官方文档&#xff1a;OpenCV的官方文档是学习OpenCV的最佳起点。它包…...

LVS负载均衡集群基础概念

目录 一、集群 1、集群概述 1.1 什么是集群 1.2 集群系统扩展方式 1.2.1 Scale UP&#xff08;纵向扩展&#xff09;&#xff1a; 1.2.2 Scale OUT&#xff08;横向扩展&#xff09;&#xff1a; 1.2.3 区别 1.3 分布式系统 1.4 分布式与集群 1.5 集群设计原则 1.6 …...

pwn学习笔记(5)--格式化字符串漏洞(未完全完成)

pwn学习笔记&#xff08;5&#xff09;–格式化字符串漏洞 ​ 前言&#xff1a;由于条件有限&#xff0c;因此对于该漏洞的学习不算很多&#xff0c; 格式化字符串漏洞基础&#xff1a; 格式化字符串介绍&#xff1a; ​ 格式化字符串函数可以接收可变数量的参数&#xff0…...

HTML标签之表单标签,web开发实例教程

标签语义化&#xff1a; 语义和默认样式的区别&#xff1a; 默认样式是浏览器设定的一些常用tag的表现形式&#xff1b;语义化的主要目的就是让大家直观的认识标签和属性的用途和作用&#xff1b; 标签语义化作用&#xff1a; 当只有HTML页面时&#xff0c;没有CSS&#xf…...

数据库-第四/五章 数据库安全性和完整性【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下计数据库系统概论中的重点概念&#xff0c;以供大家期末复习和考研复习的时候使用。 参考资料是王珊老师和萨师煊老师的数据库系统概论(第五版)。 文章目录 前言4 第四章 数据库安全性4.1 数据库安全性定义4.…...

网站维护页面404源码

网站维护页面404源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 下载地址 https://www.qqmu.com/2407.html...

CSS的文本样式属性值,web开发难点

什么是css块元素&#xff1f; 块级元素是独占一行显示的。它的兄弟元素必定不会与其在同一行中&#xff08;除非脱离了文档流&#xff09;。通俗点来说&#xff0c;就是块元素(block element)一般是其他元素的容器元素 戳这里领取完整开源项目&#xff1a;【一线大厂前端面试题…...

springboot+jsp汽车配件管理系统idea maven 项目lw

springbootweb汽车配件销售业绩管理系统服务于汽车配件公司业务,实现了客户管理&#xff0c;主要负责对客户相关数据的增删改查方面、渠道管理&#xff0c;主要对渠道信息也就是设备的供应商渠道信息进行管理、项目管理&#xff0c;主要是一些项目信息的记录与整理、销售数据管…...

计算机网络-网络安全(二)

1.应用层安全协议&#xff1a; S-HTTP或SHTTP&#xff08;Sec HTTP&#xff09;&#xff0c;安全超文本传输协议&#xff0c;是HTTP扩展&#xff0c;使用TCP的80端口。HTTPS&#xff1a;HTTPSSL&#xff0c;使用TCP的443端口。和TLS&#xff08;传输层安全标准&#xff09;是双…...

Flutter App代码混淆

Flutter 应用混淆 Flutter 应用的混淆非常简单&#xff0c;只需要在构建 release 版应用时结合使用 --obfuscate 和 --split-debug-info 这两个参数即可。 flutter build apk –obfuscate --split-debug-info 命令需要指定输出调试文件的位置&#xff0c;该命令会生成一个符号映…...

pandas中apply函数的坑——错误信息Must provide ‘func‘ or tuples of ‘(column, aggfunc)的解决办法

近期需要获取某网站上的文章标题&#xff0c;并对文章来源以及不同来源的文章数量进行分析。已通过爬虫完成对文章标题、日期和文章链接的爬取&#xff0c;并存入pandas中的dataframe中&#xff0c;准备进行下一步的分析。 该网站一般情况下&#xff0c;文章标题前两个字是信息…...

《操作系统真相还原》读书笔记二:环境搭建 xshell连接virtualbox

修改 sshd_config 使用 vi /etc/ssh/sshd_config命令进入sshd服务配置&#xff0c;键盘输入i进行编辑&#xff0c;将监听端口、监听地址前的 # 号去除&#xff0c;开启允许远程登录&#xff0c;开启使用用户名密码来作为连接验证。修改完成&#xff0c;按一下Esc&#xff0c;输…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...