news 2026/6/10 1:49:52

TCP服务器并发编程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TCP服务器并发编程

这里写目录标题

  • 1,多线程TCP并发控制

1,多线程TCP并发控制

基于多线程的TCP服务器并发程序

#include<iostream>#include<netinet/in.h>#include<vector>#include<unistd.h>#include<arpa/inet.h>#include<sys/socket.h>#include<sys/select.h>#include<sys/time.h>#include<cstring>#include<sys/select.h>#include<pthread.h>using namespace std;#definePORT8080#defineMAX_CLIENTS20#defineBUFFER_SIZE1024#defineMAX512struct SockInfo{struct sockaddr_in addr;int fd;};struct SockInfo infos[512];void*working(void*arg);void*working(void*arg){struct SockInfo*pinfo=(struct SockInfo*)arg;char ip[32];//inet_ntop(AF_INET,&pinfo->addr.sin_addr.s_addr,ip,sizeof(ip));//ntohs(pinfo->addr.sin_port);while(true){char buffer[1024];int len=recv(pinfo->fd,buffer,sizeof(buffer),0);if(len>0){cout<<buffer<<endl;}elseif(len==0){cout<<"客户端已经断开连接"<<endl;break;}else{break;}}}intmain(){int serverfd=socket(AF_INET,SOCK_STREAM,0);sockaddr_in addr;addr.sin_addr.s_addr=INADDR_ANY;addr.sin_port=htons(PORT);addr.sin_family=AF_INET;socklen_t len=sizeof(addr);bind(serverfd,(sockaddr*)&addr,len);listen(serverfd,MAX_CLIENTS);for(int i=0;i<MAX;i++){infos[i].fd=-1;}while(true){struct SockInfo*pinfo;for(int i=0;i<MAX;i++){if(infos[i].fd==-1){pinfo=&infos[i];break;}}socklen_t tmplen=sizeof(pinfo->addr);int cfd=accept(serverfd,(struct sockaddr*)&pinfo->addr,&tmplen);if(cfd==-1){perror("accept");continue;}pinfo->fd=cfd;//创建子线程pthread_t tid;pthread_create(&tid,NULL,working,pinfo);pthread_detach(tid);}close(serverfd);}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:32:29

QtScrcpy安卓投屏完整指南:从入门到精通的高效控制方案

QtScrcpy安卓投屏完整指南&#xff1a;从入门到精通的高效控制方案 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy…

作者头像 李华
网站建设 2026/6/10 12:36:56

arm64 x64交叉编译环境中Makefile编写技巧

一套Makefile打天下&#xff1a;在x64主机上优雅构建arm64程序你有没有遇到过这样的场景&#xff1f;手头是一台高性能的 x86_64 笔记本&#xff0c;却要为树莓派 4、AWS Graviton 实例或者某款国产 ARM 服务器编译固件。每次切换平台就得改一堆路径和编译器名字&#xff1f;更…

作者头像 李华
网站建设 2026/6/7 20:41:53

STM32智能小车中使用L298N的电流检测方法:全面讲解

用STM32玩转L298N电流检测&#xff1a;从原理到实战的完整指南你有没有遇到过这样的场景&#xff1f;你的智能小车正欢快地前进&#xff0c;突然轮子卡在地毯缝里——电机堵转、电流飙升&#xff0c;几秒钟后&#xff0c;一股焦味飘来&#xff0c;L298N发烫冒烟&#xff0c;甚至…

作者头像 李华
网站建设 2026/6/10 13:36:59

LeetDown终极指南:5分钟学会A6/A7设备降级

LeetDown终极指南&#xff1a;5分钟学会A6/A7设备降级 【免费下载链接】LeetDown a GUI macOS Downgrade Tool for A6 and A7 iDevices 项目地址: https://gitcode.com/gh_mirrors/le/LeetDown 还在为iPhone 5s、iPad 4等老设备无法降级而烦恼吗&#xff1f;LeetDown这款…

作者头像 李华
网站建设 2026/6/5 13:49:33

Teable私有化部署终极指南:构建企业级数据协作平台的完整教程

Teable私有化部署终极指南&#xff1a;构建企业级数据协作平台的完整教程 【免费下载链接】teable 项目地址: https://gitcode.com/GitHub_Trending/te/teable 企业数据自主掌控的新时代 在数字化转型浪潮中&#xff0c;数据安全与协作效率成为企业核心诉求。Teable作…

作者头像 李华
网站建设 2026/6/10 13:56:14

终极指南:快速上手中文心理咨询语料库 Emotional First Aid Dataset

想要构建智能心理助手却苦于缺乏高质量数据&#xff1f;Emotional First Aid Dataset&#xff08;EFAQD&#xff09;作为目前最大的中文心理咨询对话语料库&#xff0c;正是你需要的解决方案。这个包含20,000条专业标注对话的数据集&#xff0c;为AI在心理健康领域的应用提供了…

作者头像 李华