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

TCP服务器如何使用select处理多客户连接

TCP是一种面向连接的通信方式,一个TCP服务器难免会遇到同时处理多个用户的连接请求的问题,本文用一个简化的实例说明如何在一个TCP服务器程序中,使用select处理同时出现的多个客户连接,文章给出了程序源代码,本文假定读者已经具备了基本的socket编程知识,熟悉基本的服务器/客户端模型架构。

1. 基本思路

  • TCP服务器端程序,对于每一个连接请求,可以使用多线程的方式为每一个连接启动一个线程处理该连接的通信,但使用多线程的方式,通常认为有如下缺点:
    1. 多线程编程和调试相对都比较难,而且有时会出现无法预知的问题;
    2. 上下文切换的开销较大;
    3. 对于巨大量的连接,可扩展性不足;
    4. 可能发生死锁。
  • 使用select处理多连接的基本思路
    1. 建立一个用于侦听的socket,叫做master_socket;
    int master_socket = socket(AF_INET , SOCK_STREAM , 0);
    
    1. 建立一个sockets数组,用于存储已经与master_socket建立连接的socket,叫做client_socket,初始化时全部清0,数组的长度即为程序允许的最大连接数;
    #define MAX_CLIENTS     30int client_socket[MAX_CLIENTS];
    int i;
    for (i &#
http://www.lryc.cn/news/45032.html

相关文章:

  • python字符编码
  • 面向对象练习题(8)
  • 重构类关系-Extract Interface提炼接口八
  • vivo手机各系列简介和拆解
  • Redis:redis通用命令;redis常见数据结构;redis客户端;redis的序列化
  • Java新特性
  • Java_Spring:8. Spring 中 AOP 的细节
  • uni-app--》uni-app的生命周期讲解
  • fastp软件介绍
  • C++继承相关总结
  • 【从零开始学习 UVM】8.2、Reporting Infrastructure —— uvm_printer 详解
  • Mybatis、TKMybatis对比
  • 37了解高可用技术方案,如冗余、容灾
  • jdb调试问题集锦
  • 要和文心一言来一把你画我猜吗?
  • delete[] p->elems和free(p->elems)有什么区别?
  • CAS问题
  • 网络编程socket(下)
  • 华为OD机试题【打折买水果】用 C++ 编码,速通
  • JSON 数据类型
  • Python函数简介
  • 一文读懂 mysql 为什么要两阶段提交以及两阶段提交原理
  • 启动Hadoop报错【Error: JAVA_HOME is not set and could not be found.】
  • 《MySQL系列-InnoDB引擎35》索引与算法-B+树索引的使用
  • 【EHub_tx1_tx2_E100】不止科技NVISTAR ROC 300激光雷达Ubuntu18.04+ROS1ROS2 评测
  • C语言函数大全--d开头的函数
  • 基于springboot实现福聚苑社区团购演示【项目源码】
  • 动静态库的制作
  • QMS-云质-质量软件-客诉,为什么应该用两段式来处理
  • JS:关于邮箱的正则表达式及规则