通过多线程并发方式实现服务器
与多进程实现对比来看。
示例来源于网络视频
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <ctype.h>
#include <unistd.h>
#include <fcntl.h>#include "wrap.h"#define MAXLINE 8192
#define SERV_PORT 8000struct s_info { //定义一个结构体, 将地址结构跟cfd捆绑struct sockaddr_in cliaddr;int connfd;
};void *do_work(void *arg)
{int n,i;struct s_info *ts = (struct s_info*)arg;char buf[MAXLINE];char str[INET_ADDRSTRLEN]; //#define INET_ADDRSTRLEN 16 可用"[+d"查看while (1) {n = Read(ts->connfd, buf, MAXLINE); //读客户端if (n == 0) {printf("the client %d closed...\n", ts->connfd);break; //跳出循环,关闭cfd}printf("received from %s at PORT %d\n",inet_ntop(AF_INET, &(*ts).cliaddr.sin_addr, str, sizeof(str)),ntohs((*ts).cliaddr.sin_port)); //打印客户端信息(IP/PORT)for (i = 0; i < n; i++) buf[i] = toupper(buf[i]); //小写-->大写Write(STDOUT_FILENO, buf, n); //写出至屏幕Write(ts->connfd, buf, n); //回写给客户端}Close(ts->connfd);return (void *)0;
}int main(void)
{struct sockaddr_in servaddr, cliaddr;socklen_t cliaddr_len;int listenfd, connfd;pthread_t tid;struct s_info ts[256]; //根据最大线程数创建结构体数组.int i = 0;listenfd = Socket(AF_INET, SOCK_STREAM, 0); //创建一个socket, 得到lfdbzero(&servaddr, sizeof(servaddr)); //地址结构清零servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY); //指定本地任意IPservaddr.sin_port = htons(SERV_PORT); //指定端口号 8000Bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); //绑定Listen(listenfd, 128); //设置同一时刻链接服务器上限数printf("Accepting client connect ...\n");while (1) {cliaddr_len = sizeof(cliaddr);connfd = Accept(listenfd, (struct sockaddr *)&cliaddr, &cliaddr_len); //阻塞监听客户端链接请求ts[i].cliaddr = cliaddr;ts[i].connfd = connfd;/* 达到线程最大数时,pthread_create出错处理, 增加服务器稳定性 */pthread_create(&tid, NULL, do_work, (void*)&ts[i]);pthread_detach(tid); //子线程分离,防止僵线程产生.i++;}return 0;
}
相关文章:
通过多线程并发方式实现服务器
与多进程实现对比来看。 示例来源于网络视频 #include <stdio.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> #include <ctype.h> #include <unistd.h> #include <fcntl.h>#include "wrap.h"#de…...

【C语言】指针超级无敌金刚霹雳进阶(但不难,还是基础)
点击这里访问我的博客主页~~ 对指针概念还不太清楚的点击这里访问上一篇指针初阶2.0 上上篇指针初阶1.0 谢谢各位大佬的支持咯 今天我们一起来学习指针进阶内容 指针进阶 一、指针变量1、字符指针变量2、数组指针变量①数组指针变量的定义②数组指针变量的初始化 3、函数指…...

上位机图像处理和嵌入式模块部署(qmacvisual入门)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 虽然我们前面学习了很多的知识点,比如说在windows这边,用qt写界面,用opencv写图像处理代码;在linux…...
数据库事务问题整理-MySQL
什么是数据库事务? 数据库事务( transaction)是访问并可能操作(增删改查都可能有)各种数据项的一个数据库操作序列(可能有1或多个SQL语句),这些操作要么全部执行,要么全部不执行,是一个不可分割…...

工具函数模板题(蓝桥杯 C++ 代码 注解)
目录 一、Vector容器: 二、Queue队列 三、Map映射 四、题目(快递分拣 vector): 代码: 五、题目(CLZ银行问题 queue): 代码: 六、题目(费里的语言 map&…...
Ansible playbook 简介 使用场景
Ansible playbook 简介 playbook 是 ansible 用于配置,部署,和管理被控节点的剧本。 通过 playbook 的详细描述,执行其中的一系列 tasks ,可以让远端主机达到预期的状态。playbook 就像 Ansible 控制器给被控节点列出的的一系…...
TS总结10、ts的 class 类型(配置项strictPropertyInitialization、非空断言)
一、简介 1.类(class)是面向对象编程的基本构件,封装了属性和方法 1.1、属性的类型:类的属性可以在顶层声明,也可以在构造方法内部声明,如果不给出类型;TypeScript 会认为x和y的类型都是any&a…...

leetcode 热题 100_找到字符串中所有字母异位词
题解一: 滑动窗口:类似于字符串匹配,但匹配异位词需要包含相同的字母及个数,可以分别用两个数组存储字符串s滑动窗口和字符串p的字母及个数,再用Array.equals()进行比对。对于s.length()<p.length()的情况需要特判。…...
百度百科数据爬取 python 词条数据获取
最近需要补充一些电力名词的解释,尤其是文字相关内容。百度百科上的词条质量有差异,因此我们需要先手工选择一些高质量词条。 假设我们选择了互感器页面中的仪用变压器词条,首先: import requests from bs4 import BeautifulS…...
为不同文章形式选择不同的WordPress文章模板
在写文章的时候选择不同的文章形式,然后打开文章的时候会调用不同文章形式的模板。比如,文章形式为video ,就调用single-video.php模板,其它文章形式类似,可以添加多个文章样式。 //为不同文章形式的内容添加不同的si…...
MySQL存储引擎及索引机制
大家好我是咕噜美乐蒂,很高兴又和大家见面了! MySQL 存储引擎是指 MySQL 数据库管理系统中负责存储和检索数据的组件,它们可以影响数据的存储方式、事务支持、并发性能等方面。而索引则是用于加速检索数据库表中数据的数据结构。下面我将分别…...
Leetcode算法题
二进制求和 给两个字符串a和b,以二进制字符串的形式返回它们的和。 示例 1: 输入:a “11”, b “1” 输出:“100” 示例 2: 输入:a “1010”, b “1011” 输出:“10101” 提示: 1 <…...

数据结构之七大排序
𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…...

【MySQL】数据库中常用的函数
目录 聚合函数COUNT()函数的多种用法COUNT(*)COUNT(主键)COUNT(1)COUNT(常量)COUNT(非主键)COUNT(distinct(字段)) COUNT()函数小结 字符函数length(str)函数:获取参数值的字节个数concat(str1,str2,...)函数:字符串拼接upper(str)、lower(str)函数:大小…...
嵌入式面试常见问题(四)
1.在基于Linux的网络套接字编程中,如果需要创建一个IPv4的网络套接字,应该在socket函数中指定domain参数为AF_INET 解析: socket()函数创建套接字 函数原型:int socket(int domain, int type, int protocol); domain:协议簇&…...

用Java在Spring Boot项目中,如何传递来传递一个对象(多个参数??
前言: 在前面我们已经了解到,Spring Boot项目中,可以传递一个参数,或者多个参数,但是,随着参数的增加,咱们总不能每增加一个参数,就重新写一段代码吧??这样显…...

如何利用ChatGPT搞科研?论文检索、写作、基金润色、数据分析、科研绘图(全球地图、植被图、箱型图、雷达图、玫瑰图、气泡图、森林图等)
以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…...

一命通关二分搜索
二分法 简介 和双指针一样,二分法也是一种优化方法,或者说二分法就是双指针的一类。不过,二分法的思想比双指针诞生更早也更广泛,在我们日常生活里也无时不刻在使用二分的思想。 比如我们想回顾某些影片,但是只记得…...

串联所有单词的子串
题目链接 串联所有单词的子串 题目描述 注意点 words[i] 和 s 由小写英文字母组成1 < words.length < 5000可以以 任意顺序 返回答案words中所有字符串长度相同 解答思路 根据滑动窗口哈希表解决本题,哈希表存储words中所有的单词及单词的出现次数&#…...

【会议征稿通知】第四届经济发展与商业文化国际学术会议(ICEDBC2024)
第四届经济发展与商业文化国际学术会议(ICEDBC2024) The 4th International Conference on Economic Development and Business Culture (ICEDBC 2024) 第四届经济发展与商业文化国际学术会议(ICEDBC2024)将于2024年6月21-23日在…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...