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

Posted whowin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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     30
    
    int client_socket[MAX_CLIENTS];
    int i;
    for (i &#

以上是关于TCP服务器如何使用select处理多客户连接的主要内容,如果未能解决你的问题,请参考以下文章

基于 Select Poll的TCP发服务器

基于 Select Poll的TCP发服务器

c# socket多连接(如何达到10万个客户端)

Python网络编程之多任务版TCP服务端程序开发

TCP socket 多线程 并发服务器(发送)与客户端(接收)

select+异步