本例实现如下功能:
服务端接收来自客户端发送过来的字符串,将小写转换为大写后发送回客户端。
其中,每一个新客户端连接后,服务端主进程为此客户端创建一个线程进行数据的处理。
多线程并发服务端:
/*server.c*/
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#define BUFSIZE 666
#define SERV_PORT 8888
#define MAX 200 //本例线程最大个数设为200
/*与服务端通信的客户端地址及通信文件描述符的信息结构*/
struct s_info{
struct sockaddr_in cliaddr;
int connfd;
};
void *work(void *arg)
{
int n, i;
struct s_info *ts = (struct s_info*)arg;
char buf[BUFSIZE];
char str[INET_ADDRSTRLEN];
/*线程资源回收*/
pthread_detach(pthread_self());
while(1){
/*读取数据*/
n = read(ts-&