【网络编程】服务器模型(二):并发服务器模型(多线程)和 I/O 复用服务 ...

打印 上一主题 下一主题

主题 900|帖子 900|积分 2700

一、多线程并发服务器

高并发的 TCP 服务器 中,单线程或 fork() 多进程 方式会导致 资源浪费和性能瓶颈。因此,我们可以利用 多线程 来高效处理多个客户端的毗连。
承接上文中的多进程并发服务器,代码优化目的:
  1. 1.使用 pthread 实现多线程服务器
  2. 2.每个客户端连接后,服务器创建一个独立线程进行处理
  3. 3.回显(Echo)客户端发送的消息
  4. 4.支持多个客户端同时连接
  5. 5.主线程负责监听连接,子线程负责处理客户端请求
复制代码
完整代码:
[code]#include <stdio.h>      // 标准输入输出
#include <stdlib.h>     // exit()、malloc()、free()
#include <string.h>     // 字符串操作
#include <unistd.h>     // read(), write(), close()
#include <arpa/inet.h>  // sockaddr_in, inet_addr()
#include <sys/socket.h> // 套接字 API
#include <netinet/in.h> // sockaddr_in 结构体
#include <pthread.h>    // 线程 API

#define PORT 8080        // 服务器监听端口
#define BUFFER_SIZE 1024 // 缓冲区大小
#define MAX_CLIENTS 100  // 最大客户端连接数

// **线程处理客户端请求**
void *handle_client(void *arg) {
    int client_fd = *((int *)arg);
    free(arg); // 释放动态分配的内存
    char buffer[BUFFER_SIZE];
    int bytes_read;

    printf("✅ 客户端线程启动,处理客户端 %d\n", client_fd);

    while (1) {
        memset(buffer, 0, BUFFER_SIZE); // 清空缓冲区
        bytes_read = read(client_fd, buffer, BUFFER_SIZE);
        if (bytes_read <= 0) {
            printf("❌ 客户端 %d 断开连接\n", client_fd);
            break; // 退出循环,关闭连接
        }

        printf("

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表