tcp 多线程/多进程 并发执行

多线程并发执行方法

#include <myhead.h>

#define PORT 4444

#define IP "192.168.252.200"

typedef struct

{

int newfd;//文件描述符

struct sockaddr_in cin;//客户端数据信息

}SB;

void *fun1 (void *a)

{

int newfd = ((SB *)a)->newfd;

struct sockaddr_in cin = ((SB *)a)->cin;

char buff[1024];

while(1)

{

bzero(buff,sizeof(buff));

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

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

printf("信息:%s\n",buff);

strcat(buff," 666");

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

}

pthread_exit(NULL);

}

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

{

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

int kkk =888;

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

{

perror("setsockopt");

return -1;

}

struct sockaddr_in sin =

{

.sin_family = AF_INET,

.sin_port = htons(PORT),

.sin_addr.s_addr = inet_addr(IP)

};

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

{

perror("bind");

return -1;

}

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

{

perror("listen");

return -1;

}

struct sockaddr_in cin ;

int len = sizeof(cin);

SB DSB;

while(1)

{

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

pthread_t tid;

DSB.newfd = newfd;

DSB.cin = cin;

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

{

perror("pthread_creat");

return -1;

}

pthread_detach(tid);

}

close(oldfd);

//printf("");

return 0;

}

多进程并发执行

#include <myhead.h>

#define PORT 5555

#define ID "192.168.252.200"

void hande (int sss)

{

if(sss == SIGCHLD)

{

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

}//回收僵尸进程

}

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

{

if(signal(SIGCHLD,hande)==SIG_ERR)

{

perror("signal");

return -1;

}//捕捉子进程的退出信号

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

int kkk = 666 ;

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

{

perror("setsockopt");

return -1;

}//端口号快速复用

struct sockaddr_in sin =

{

.sin_family = AF_INET,

.sin_port = htons(PORT),

.sin_addr.s_addr = inet_addr(ID)

};

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

{

perror("bind");

return -1;

}

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

{

perror("listen");

return -1;

}

struct sockaddr_in cin;

int len = sizeof(cin);

while(1)

{

pid_t pit = fork();

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

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

if(pit>0)

{

close(newfd);

}

else if(pit == 0)

{

//close(oldfd);

char buff[1024];

while(1)

{

bzero(buff,sizeof(buff));

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

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

printf("消息:%s\n",buff);

if(len1 == 0)

{

printf("已无连接\n");

break;

}

strcat(buff,"666");

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

printf("操作完成\n");

printf("-----------------------\n");

}

//close(newfd);

exit(0);

}

}

close(oldfd);

//printf("");

return 0;

}

相关推荐
C嘎嘎嵌入式开发3 分钟前
(10)100天python从入门到拿捏《Python中的数据结构与自定义数据结构》
数据结构·python·算法
熬了夜的程序员5 分钟前
【LeetCode】69. x 的平方根
开发语言·算法·leetcode·职场和发展·动态规划
Niuguangshuo13 分钟前
音频特征提取算法介绍
算法·音视频
fengfuyao98528 分钟前
基于MATLAB的匈牙利算法实现任务分配
算法·数学建模·matlab
CoovallyAIHub34 分钟前
超详细链式插补 (MICE) 多元插补:机器学习模型的高级缺失数据处理
算法·机器学习·计算机视觉
明天会有多晴朗1 小时前
C语言入门教程(第6讲):函数——让程序学会“分工合作”的魔法
c语言·开发语言·算法
玖釉-1 小时前
三维模型数据结构与存储方式解析
数据结构·算法·图形渲染
草莓熊Lotso1 小时前
《算法闯关指南:优选算法--二分查找》--17.二分查找(附二分查找算法简介),18. 在排序数组中查找元素的第一个和最后一个位置
开发语言·c++·算法
泽虞2 小时前
《Qt应用开发》笔记p4
linux·开发语言·数据库·c++·笔记·qt·算法
泽虞2 小时前
《Qt应用开发》笔记p5
linux·开发语言·c++·笔记·qt·算法