tcp线程进程多并发

tcp线程多并发

#include<myhead.h>

#define SERPORT 8888

#define SERIP "192.168.0.118"

#define BACKLOG 20

typedef struct

{

int newfd;

struct sockaddr_in cin;

}BMH;

void *fun1(void *sss)

{

int newfd=accept((BMH *)sss)->newfd;

struct sockaddr_in cin=((HMY *)sss)->cin;

char buff[1000];

while(1)

{

bzero(buff,sizeof(buff));

int len=recv(newfd,buff,sizeof(buff),0);

printf("收到%s:%d的信息%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buff);

if(len==0)

{

printf("客户端退出");

break;

}

strcat(buff,"xxx");

send(newfd,buff,sizeof(buff),0);

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

}

pthread_exit(NULL);

}

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

{

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

if(oldfd==-1)

{

perror("oldfd");

return -1;

}

int bmz=8;

if(setsockopt(oldfd,SOL_SOCKET,SO_REUSEADDR,&bmz,sizeof(bmz))==-1)

{

perror("setsockopt");

return -1;

}

printf("端口快速复用应用成功\n");

struct sockaddr_in sin={

.sin_failmy=AF_INET,

.sin_port=htons(SERPORT),

.sin_addr.s_addr=inet_addr(SERIP)

};

if(bind(oldfd,(struct sockaddr *)&sin,sizeof(sin))==-1)

{

perror(bind);

return -1;

}

if(listen(oldfd,BACKLOG)==-1)

{

perror("listen");

return -1;

}

printf("监听成功\n");

struct sockaddr_in cin;

int cinlen=sizeof(cin);

BMH MSG;

while(1)

{

int newfd=accept(oldfd,(struct sockaddr *)&cin,&cinlen);

if(newfd==-1)

{

perror("accept");

return -1;

}

printf("%s:%d客户端连接\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));

MSG.newfd=newfd;

MSG.cin=cin;

pthread_t tid;

if(pthread_create(&tid,NULL,fun1,MSG)!=0)

{

perror("pthread_create");

return -1;

}

pthread_detach(tid);

}

return 0;

}

tcp进程多并发

#include <myhead.h>

#define SERPORT 9999

#define SERIP "192.168.0.130"

#define BACKLOG 10

void hande(int sss)

{

if(sss==SIGCHLD)

{

while(waitpid(-1,NULL,WNOHANG)!=-1);

}

}

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

{

#if 1

if(signal(SIGCHLD,hande)==SIG_ERR)//捕获子进程退出的信号

{

perror("signal");

return -1;

}

#endif

int oldfd = socket(AF_INET,SOCK_STREAM,0);//1、创建原始套接字

if(oldfd ==-1)

{

perror("socket");

return -1;

}

int kkk=666;

if(setsockopt(oldfd,SOL_SOCKET,SO_REUSEADDR,&kkk,sizeof(kkk))==-1)//端口号快速复用

{

printf("setsockopt");

return -1;

}

printf("端口快速复用成功\n");

struct sockaddr_in sin = {

.sin_family = AF_INET,

.sin_port = htons(SERPORT),

.sin_addr.s_addr = inet_addr(SERIP)

};

if(bind(oldfd,(struct sockaddr *)&sin,sizeof(sin))==-1)//2、绑定

{

perror("bind");

return -1;

}

if(listen(oldfd,BACKLOG)==-1)

{

perror("listen");

return -1;

}

//接下来创建子进程,父进程负责接收客户端请求,子进程负责数据收发

struct sockaddr_in cin;

int cinlen = sizeof(cin);

while(1)

{

int newfd = accept(oldfd,(struct sockaddr *)&cin,&cinlen);

if(newfd==-1)

{

perror("accept");

return -1;

}

printf("newfd = %d\n",newfd);

printf("%s:%d连接成功\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));

pid_t pid = fork();

if(pid>0)

{

close(newfd);

}

else if(pid==0)

{

close(oldfd);

char buff[1024];

while(1)

{

int len = recv(newfd,buff,sizeof(buff),0);

if(len==0)

{

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

break;

}

printf("服务器收到信息:%s\n",buff);

strcat(buff,"^_^");

send(newfd,buff,sizeof(buff),0);

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

}

exit(0);

}

else{

perror("fork");

return -1;

}

}

close(oldfd);

return 0;

}

相关推荐
leon62529 分钟前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
CV工程师小林29 分钟前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先
Navigator_Z1 小时前
数据结构C //线性表(链表)ADT结构及相关函数
c语言·数据结构·算法·链表
Aic山鱼1 小时前
【如何高效学习数据结构:构建编程的坚实基石】
数据结构·学习·算法
天玑y1 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯
sjsjs112 小时前
【数据结构-一维差分】力扣1893. 检查是否区域内所有整数都被覆盖
数据结构·算法·leetcode
redcocal2 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
码了三年又三年2 小时前
【算法】滑动窗口—找所有字母异位词
算法
山脚ice2 小时前
【Hot100】LeetCode—72. 编辑距离
算法·leetcode
RaidenQ2 小时前
2024.9.13 Python与图像处理新国大EE5731课程大作业,索贝尔算子计算边缘,高斯核模糊边缘,Haar小波计算边缘
图像处理·python·算法·课程设计