多线程并发服务器

#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;

}

相关推荐
w***Q35022 分钟前
Git工作流自动化
运维·git·自动化
mit6.8242 小时前
bfs|栈
算法
xu_yule3 小时前
Linux_12(进程信号)内核态和用户态+处理信号+不可重入函数+volatile
linux·运维·服务器
虾..3 小时前
Linux 环境变量&&进程优先级
linux·运维·服务器
CoderYanger3 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
jllllyuz4 小时前
Matlab实现基于Matrix Pencil算法实现声源信号角度和时间估计
开发语言·算法·matlab
稚辉君.MCA_P8_Java4 小时前
DeepSeek 插入排序
linux·后端·算法·架构·排序算法
多多*4 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
数据库学啊5 小时前
团队小希望运维简单,时序数据库选型有什么推荐?
运维·数据库·时序数据库
.YM.Z5 小时前
【数据结构】:排序(一)
数据结构·算法·排序算法