socket网络编程——多进程、多线程处理并发

  如下图所示, 当一个客户端与服务器建立连接以后,服务器端 accept()返回,进而准备循环接收客户端发过来的数据。
  如果客户端暂时没发数据,服务端会在 recv()阻塞。此时,其他客户端向服务器发起连接后,由于服务器阻塞了,无法执行 accept()接受连接,也就是其他客户端发送的数据,服务器无法读取。服务器也就无法并发同时处理多个客户端。

  这个问题可以通过引入多线程和多进程来解决。 服务端接受一个客户端的连接后,创建一个线程或者进程,然后在新创建的线程或进程中循环处理数据。主线程(父进程)只负责监听客户端的连接,并使用 accept()接受连接,不进行数据的处理。如下图所示:

 

多线程处理并发的服务器端示例代码 MultiThread.c 如下: 

#include <stdio.h>      // 引入标准输入输出头文件
#include <stdlib.h>     // 引入标准库头文件
#include <unistd.h>     // 引入Unix标准函数定义头文件
#include <string.h>     // 引入字符串处理头文件
#include <assert.h>     // 引入断言头文件
#include <sys/socket.h> // 引入套接字接口头文件
#include <netinet/in.h> // 引入互联网地址族头文件
#include <arpa/inet.h>  // 引入互联网定义头文件
#include <pthread.h>    // 引入POSIX线程头文件

v

相关推荐

  1. 线socket编程

    2024-06-06 22:14:04       33 阅读
  2. 进程并发服务器与线并发服务器

    2024-06-06 22:14:04       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 22:14:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 22:14:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 22:14:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 22:14:04       18 阅读

热门阅读

  1. 力扣每日一题 6/6

    2024-06-06 22:14:04       11 阅读
  2. Springboot+WebSocket实现消息推送

    2024-06-06 22:14:04       9 阅读
  3. 嵌入式学习——网络编程(UDP)——day30

    2024-06-06 22:14:04       8 阅读
  4. iPhone 语言编程:深入探索与无限可能

    2024-06-06 22:14:04       11 阅读
  5. iOS swift5 加载网络图片的第三方框架

    2024-06-06 22:14:04       8 阅读