多进程利用TCP进行信息群发功能

/服务器的代码

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

#define SEVER_IP "192.168.11.224"

#define PORT_NUM 1111

typedef struct sockaddr SA;

typedef struct sockaddr_in SIN;

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

{

int sockfd;

SIN seraddr = {0};

int ret,ret1,ret2;

int res,res1,res2;

int reuse = 1;

int clifd1,clifd2;

bzero(&seraddr,sizeof(SIN));

seraddr.sin_family = AF_INET;

seraddr.sin_port = htons(PORT_NUM);

seraddr.sin_addr.s_addr = inet_addr(SEVER_IP);

sockfd = socket(AF_INET,SOCK_STREAM,0);

if(sockfd == -1)

{

printf("socketfd error\r\n");

exit(0);

}

printf("sockfd = %d\r\n",sockfd);

setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse));

ret=bind(sockfd,(SA *)&seraddr,sizeof(SA));

if(ret == -1)

{

printf("failed\r\n");

exit(0);

}

printf("ret = %d\r\n",ret);

ret1 = listen(sockfd,5);

if(ret1 == 0)

{

printf("listen success\r\n");

}

SIN cliaddr = {0};

socklen_t addrlen;

clifd1 = accept(sockfd,(SA *)&cliaddr,&addrlen);//accept函数是有阻塞功能

printf("clifd1 = %d\r\n",clifd1);

clifd2 = accept(sockfd,(SA *)&cliaddr,&addrlen);//accept函数是有阻塞功能

printf("clifd2 = %d\r\n",clifd2);

if(clifd1 == -1)

{

perror("accept failed\r\n");

exit(0);

}

if(clifd2 == -1)

{

perror("accept failed\r\n");

exit(0);

}

res = fork();

while(1)

{

if(res == 0)

{

while(1)

{

char r_buf20 = {0};

recv(clifd1,r_buf,sizeof(r_buf),0);

send(clifd2,r_buf,sizeof(r_buf),0);

}

}

else

{

while(1)

{

char t_buf20 = {0};

recv(clifd2,t_buf,sizeof(t_buf),0);

send(clifd1,t_buf,sizeof(t_buf),0);

}

}

}

close(sockfd);

close(clifd1);

close(clifd2);

return 0;

}

================================================

//客户端的代码

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

#define SEVER_IP "192.168.11.224"

#define PORT_NUM 1111

typedef struct sockaddr SA;

typedef struct sockaddr_in SIN;

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

{

int serfd;

int clidfd;

SIN seraddr = {0};

int ret,ret1,ret2;

int rec_len = 0;

bzero(&seraddr,sizeof(SIN));

serfd = socket(AF_INET,SOCK_STREAM,0);

if(serfd == -1)

{

perror("socket failed\r\n");

exit(0);

}

printf("%d\r\n",serfd);

bzero(&seraddr,sizeof(SIN));

seraddr.sin_family = AF_INET;

seraddr.sin_port = htons(PORT_NUM);

seraddr.sin_addr.s_addr = inet_addr(SEVER_IP);

serfd = socket(AF_INET,SOCK_STREAM,0);

ret = connect(serfd,(SA *)&seraddr,sizeof(SA));

if(ret == -1)

{

perror("connect failed\r\n");

exit(0);

}

printf("connect success\r\n");

int res;

res = fork();

if(res == 0)

{

char t_buf20 = {0};

while(1)

{

scanf("%s",t_buf);

send(serfd,t_buf,sizeof(t_buf),0);

}

}

else

{

char r_buf20 = {0};

while(1)

{

recv(serfd,r_buf,sizeof(r_buf),0);

printf("A:%s\r\n",r_buf);

}

}

close(serfd);

return 0;

}

相关推荐
江畔柳前堤4 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
数智工坊4 小时前
Zotero自建Ubuntu WebDAV附件同步方案(完美解决存储空间不足)
linux·运维·ubuntu
Forever Nore5 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
ltl6 小时前
HTTP/3 实战:从 QUIC 到 H3 的完整请求链路
linux
ltl6 小时前
POSIX 文件锁:flock、fcntl 与 NFS 上的工程陷阱
linux
ltl6 小时前
CUDA 生态:cuBLAS、cuDNN、NCCL、Triton、CUTLASS
linux
饺子大魔王的男人6 小时前
CentOS部署Cockpit:图形化查看系统、日志与服务状态
linux·运维·centos
不会就选b6 小时前
Linux之信号(二)
linux·运维·服务器
罗西的思考7 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
我是小灰灰吖7 小时前
QT在线安装器使用指南:从下载到配置完整教程
linux·qt·ubuntu