多线程并发服务器

#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 buff[1024];

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;

}

相关推荐
小白不想白a42 分钟前
【shell】每日shell练习:安全日志入侵检测/系统配置文件合规检查
运维·服务器
洛克大航海2 小时前
Linux 中新建用户
linux·运维·服务器
傻童:CPU2 小时前
C语言需要掌握的基础知识点之前缀和
java·c语言·算法
又见野草2 小时前
软件设计师知识点总结:数据结构与算法(超级详细)
数据结构·算法·排序算法
dehuisun2 小时前
jenkins流水线部署springboot项目
运维·jenkins
GalaxyPokemon2 小时前
有一个服务器,用于提供HTTP服务,但是需要限制每个用户在任意的100秒内只能请求60次,怎么实现这个功能
算法
fl1768313 小时前
基于opencv+Mediapipe+CNN实现用手势识别控制对鼠标操控python源码+项目说明+设计文档
算法
K 旺仔小馒头3 小时前
优选算法:01 双指针巧解移动零问题
c++·算法·刷题
蜜蜜不吃糖3 小时前
解决Vcenter告警datastore存储容量不足问题
linux·运维·服务器
东城绝神3 小时前
《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署redis 7.4.5容器版分片集群》
linux·运维·redis·架构·分片集群