多线程并发服务器

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

}

相关推荐
Full Stack Developme1 小时前
Linux 多种压缩格式,优缺点和适用场景
linux·运维·服务器
yBmZlQzJ6 小时前
财运到内网穿透域名解析技术机制与中立评估
运维·经验分享·docker·容器·1024程序员节
Shanxun Liao6 小时前
Cenots 7.9 配置多台 SSH 互信登陆免密码
linux·运维·ssh
j_xxx404_6 小时前
Linux:第一个程序--进度条|区分回车与换行|行缓冲区|进度条代码两个版本|代码测试与优化
linux·运维·服务器
一点晖光6 小时前
jenkins优化记录
运维·jenkins
wadesir6 小时前
Rust中的条件变量详解(使用Condvar的wait方法实现线程同步)
开发语言·算法·rust
yugi9878387 小时前
基于MATLAB实现协同过滤电影推荐系统
算法·matlab
TimberWill7 小时前
哈希-02-最长连续序列
算法·leetcode·排序算法
Morwit7 小时前
【力扣hot100】64. 最小路径和
c++·算法·leetcode
leoufung7 小时前
LeetCode 373. Find K Pairs with Smallest Sums:从暴力到堆优化的完整思路与踩坑
java·算法·leetcode