TCP并发实现
文章目录TCP服务端基础服务端TCP服务设计模式迭代服务一次处理一个客户端多进程并发服务僵尸进程处理信号处理多线程并发服务嵌入式设备线程注意TCP客户端基础客户端交互式客户端客户端断线重连机制TCP服务端基础服务端// 基础TCP服务器核心流程#defineBUFFER_SIZE1024// 根据设备内存自定义charbuf[BUFFER_SIZE];intmain(){// 1. 创建socketfdsocket(AF_INET,SOCK_STREAM,0);// 2. 准备地址结构addr.sin_familyAF_INET;addr.sin_porthtons(PORT);addr.sin_addr.s_addr0;// INADDR_ANY的另一种写法// 3. 绑定地址bind(fd,(structsockaddr*)addr,sizeof(addr));// 4. 开始监听listen(fd,BACKLOG);// 5. 接受连接阻塞等待newfdaccept(fd,NULL,NULL);// 不关心客户端地址// 6. 接收数据read(newfd,buf,BUFFER_SIZE);// 7. 关闭连接close(newfd);close(fd);return0;}TCP服务设计模式迭代服务一次处理一个客户端// 简化的迭代服务器框架while(1){client_fdaccept(server_fd,NULL,NULL);if(client_fd0)continue;handle_client(client_fd);// 处理客户端请求close(client_fd);// 处理完后关闭}缺点无法并发处理多个客户端多进程并发服务// 父进程监听连接创建子进程处理// 子进程处理具体客户端请求结束后退出pid_tpidfork();if(pid0){// 子进程close(server_fd);// 关闭不需要的监听sockethandle_client(client_fd);close(client_fd);exit(0);// 子进程结束}else{// 父进程close(client_fd);// 父进程关闭已分发的客户端socketwaitpid(-1,NULL,WNOHANG);// 非阻塞回收子进程}僵尸进程处理信号处理// 使用信号处理函数回收子进程voidsigchld_handler(intsig){while(waitpid(-1,NULL,WNOHANG)0){// 回收所有已终止的子进程}}// 注册信号处理器signal(SIGCHLD,sigchld_handler);// 更推荐使用sigaction可重启系统调用structsigactionsa;sa.sa_handlersigchld_handler;sigemptyset(sa.sa_mask);sa.sa_flagsSA_RESTART|SA_NOCLDSTOP;sigaction(SIGCHLD,sa,NULL);多线程并发服务// 主线程监听连接创建子线程// 工作线程处理客户端请求void*client_handler(void*arg){intclient_fd*(int*)arg;// 处理客户端...close(client_fd);returnNULL;}// 创建线程处理每个客户端pthread_ttid;int*client_fd_ptrmalloc(sizeof(int));*client_fd_ptrclient_fd;pthread_create(tid,NULL,client_handler,client_fd_ptr);pthread_detach(tid);// 分离线程自动回收资源嵌入式设备线程注意// 1. 设置线程栈大小嵌入式内存有限pthread_attr_tattr;pthread_attr_init(attr);pthread_attr_setstacksize(attr,8192);// 8KB栈空间// 2. 线程池模式避免频繁创建销毁线程// 3. 注意线程安全共享数据加锁TCP客户端基础客户端// 核心流程intmain(){// 1. 创建socketfdsocket(AF_INET,SOCK_STREAM,0);// 2. 设置服务器地址addr.sin_familyAF_INET;addr.sin_porthtons(PORT);addr.sin_addr.s_addrinet_addr(127.0.0.1);// 3. 连接服务器connect(fd,(structsockaddr*)addr,sizeof(addr));// 4. 发送数据write(fd,STR,sizeof(STR));// 5. 关闭连接close(fd);}交互式客户端// 支持命令行参数和交互式输入intmain(intargc,char*argv[]){// 检查参数if(argc3){fprintf(stderr,用法: %s IP地址 端口\n,argv[0]);exit(EXIT_FAILURE);}// 解析参数char*server_ipargv[1];intserver_portatoi(argv[2]);// 创建socket和连接...// 交互循环while(1){printf(请输入消息: );fgets(buf,BUFSIZ,stdin);// 发送数据intnwrite(fd,buf,strlen(buf));if(n0){perror(发送失败);break;}// 可选接收服务器响应// n read(fd, response, sizeof(response));}}客户端断线重连机制// 嵌入式设备常用增加连接稳定性#defineMAX_RETRY5#defineRETRY_DELAY3// 秒intconnect_with_retry(constchar*ip,intport,intmax_retry){intsockfd;structsockaddr_inaddr;for(intretry0;retrymax_retry;retry){sockfdsocket(AF_INET,SOCK_STREAM,0);if(sockfd0){perror(创建socket失败);return-1;}memset(addr,0,sizeof(addr));addr.sin_familyAF_INET;addr.sin_porthtons(port);inet_pton(AF_INET,ip,addr.sin_addr);if(connect(sockfd,(structsockaddr*)addr,sizeof(addr))0){printf(连接成功第%d次尝试\n,retry1);returnsockfd;}close(sockfd);printf(连接失败%d秒后重试...\n,RETRY_DELAY);sleep(RETRY_DELAY);}fprintf(stderr,连接失败达到最大重试次数\n);return-1;}

相关新闻

MathCAD多用户管理策略

MathCAD多用户管理策略

在科研、教育和工程领域,MathCAD作为一款强大的数学计算和工程设计软件,广泛应用于多个用户之间的协作。为了满足多用户环境下的许可证管理需求,MathCAD提供了灵活的多用户管理策略。本文将为您详细介绍MathCAD的多用户管理策略,帮…

2026/7/3 16:58:53 阅读更多 →
‌视频转音频不求人,这几种方法零基础也能学会!

‌视频转音频不求人,这几种方法零基础也能学会!

当你想把喜欢的视频BGM设置为手机铃声或者想提取视频里的讲座音频用于学习,不妨试试视频转音频操作。还不知道如何快速实现?下面分享几个实用妙招,即便是零基础也能学会!一、各类音频格式的选择攻略▪ 常见格式特点MP3通用性强&am…

2026/7/3 0:43:12 阅读更多 →
学霸同款2026 AI论文平台TOP9:自考毕业论文全攻略

学霸同款2026 AI论文平台TOP9:自考毕业论文全攻略

学霸同款2026 AI论文平台TOP9:自考毕业论文全攻略 自考论文写作新选择:2026年AI平台测评指南 随着人工智能技术的不断进步,越来越多的自考学生开始借助AI论文平台来提升写作效率与质量。然而,面对市场上五花八门的工具&#xff0c…

2026/7/3 16:58:56 阅读更多 →

最新新闻

AI冲击下数据岗位重构:国际人才策略与能力原子化实践

AI冲击下数据岗位重构:国际人才策略与能力原子化实践

1. 项目概述:这不是一份“就业报告”,而是一份人才迁徙路线图“2025年美国数据岗位市场”——光看标题,你可能以为这又是一份堆砌招聘平台统计数字、罗列热门职位名称的常规行业简报。但实际不是。我连续三年深度参与硅谷、纽约、奥斯汀三地的…

2026/7/4 16:36:50 阅读更多 →
STM32与MC6470 IMU的硬件协同与运动控制优化

STM32与MC6470 IMU的硬件协同与运动控制优化

1. MC6470与STM32L4S5ZI的硬件协同架构解析MC6470作为一款六轴惯性测量单元(IMU),其核心价值在于将三轴加速度计和三轴陀螺仪集成在单芯片方案中。在实际项目中,我测量到其加速度计量程可达16g,角速度测量范围达到2000dps,这对于大…

2026/7/4 16:34:49 阅读更多 →
XWiki路径遍历漏洞CVE-2025-55747复现与深度解析

XWiki路径遍历漏洞CVE-2025-55747复现与深度解析

1. 项目概述与漏洞背景 最近在梳理一些开源项目的安全公告时,XWiki的一个路径遍历漏洞(CVE-2025-55747)引起了我的注意。这个漏洞编号看着新鲜,但本质上又是一个经典的“输入验证不严”导致的安全问题。简单来说,攻击者…

2026/7/4 16:30:48 阅读更多 →
SpringBoot+Vue家政平台毕设实战:从工程化思维到生产级实现

SpringBoot+Vue家政平台毕设实战:从工程化思维到生产级实现

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度 你有没有过这样的经历:毕业设计选题时,面对“家政服务平台”这类看似普通的题目,感觉无从下手&a…

2026/7/4 16:30:48 阅读更多 →
PC微信小程序V1MMWX加密包逆向解析:AES+XOR双重加密原理与Python解密实战

PC微信小程序V1MMWX加密包逆向解析:AES+XOR双重加密原理与Python解密实战

1. 项目概述:为什么我们需要关注PC微信小程序的加密包?如果你是一名前端开发者、安全研究员,或者单纯对微信小程序的技术实现感到好奇,那么你很可能已经发现,直接从PC端微信获取到的小程序包(.wxapkg文件&a…

2026/7/4 16:30:48 阅读更多 →
基于改进YOLOv3的实时口罩佩戴检测系统实现

基于改进YOLOv3的实时口罩佩戴检测系统实现

1. 项目概述:基于YOLOv3的口罩佩戴检测系统 这个毕业设计项目实现了一个基于深度学习的口罩佩戴检测系统,采用改进的YOLOv3算法作为核心检测模型。系统能够实时检测图像或视频中的人脸,并准确判断是否佩戴口罩、未佩戴口罩或佩戴不规范三种状…

2026/7/4 16:28:46 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻