多线程并发服务器

#include<myhead.h>

#define SERIP "192.168.0.161"

#define SERPORT 9999

#define listensize 10

typedef struct

{

int newsocket;

struct sockaddr_in cln;

}Ccln;

void *trans(void*arg)

{

Ccln *cln = (Ccln*)arg;

char buff1024;

while(1)

{

memset(buff,0,sizeof(buff));

//6.1 recv send

int len =recv(cln->newsocket,buff,sizeof(buff),0);

if(len == 0)

{

printf("客户端退出\n");

break;

}

printf("收到来自%s:%d客户端的信息:%s\n",inet_ntoa(cln->cln.sin_addr),ntohs(cln->cln.sin_port),buff);

strcat(buff,"1");

send(cln->newsocket,buff,sizeof(buff),0);

//6.2 p_exit

pthread_exit(NULL);

}

}

int main(int argc, const char *argv\[\])

{

//1,socket

int oldsocket = socket(AF_INET,SOCK_STREAM,0);

if(oldsocket==-1)

{

perror("socket");

return -1;

}

//2.setsockopt

int k=1;

if(setsockopt(oldsocket,SOL_SOCKET,SO_REUSEADDR,&k,sizeof(k))==-1)

{

perror("setsockopt");

return -1;

}

printf("设置复用端口成功\n");

//3.bind

struct sockaddr_in sln={

.sin_family=AF_INET,

.sin_addr = inet_addr(SERIP),

.sin_port = htons(SERPORT)

};

if(bind(oldsocket,(struct sockaddr*)&sln,sizeof(sln))==-1)

{

perror("bind");

return -1;

}

//4.listen

if(listen(oldsocket,listensize)==-1)

{

perror("listen");

return -1;

}

//5.accept in circle

struct sockaddr_in cln;

int clnlen =sizeof(cln);

while(1)

{

int newsocket = accept(oldsocket,(struct sockaddr*)&cln,&clnlen);

if(newsocket==-1)

{

perror("accept");

return -1;

}

printf("%s:%d发出请求连接\n",inet_ntoa(cln.sin_addr),ntohs(cln.sin_port));

//6.p_create

Ccln clninfo;

clninfo.newsocket = newsocket;

clninfo.cln = cln;

pthread_t tid;

if(pthread_create(&tid,NULL,trans,&clninfo)!=0)

{

perror("pthread_create");

return -1;

}

printf("发送成功\n");

//7.p_detach

pthread_detach(tid);

}

//8.close

close(oldsocket);

return 0;

}

相关推荐
zhougl99613 小时前
Gateway 和 Nginx 路由区别
运维·nginx·gateway
yyds_yyd_1008613 小时前
1464. 数组中两元素的最大乘积(2026.07.27)
数据结构·c++·算法·leetcode
KaMeidebaby14 小时前
卡梅德生物技术快报 | 核酸适配体文库测序:核酸适配体文库测序的技术原理、实验流程与数据解析
前端·网络·数据库·人工智能·算法
听风34714 小时前
Arch Linux 软件安装完全指南
linux·运维·archlinux·pacman
geovindu15 小时前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
沉迷学习 日益消瘦15 小时前
10-Gateway API
运维·kubernetes·gateway
智购科技智能售货柜15 小时前
无人售货机连不上服务器?MQTT 频繁掉线排查全流程~YH
运维·服务器
心念枕惊15 小时前
Docker--Docker Swarm集群
运维·docker·容器
ekkoalex16 小时前
训练框架以及算法实现的框架
算法
難釋懷16 小时前
Nginx-proxy缓存断点续传缓存 range
运维·nginx·缓存