多进程利用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;

}

相关推荐
8Qi81 分钟前
LeetCode 236. 二叉树的最近公共祖先(LCA)
算法·leetcode·二叉树·递归·lca·后序遍历
深念Y1 分钟前
openwrt.ai:一款在线OpenWrt固件定制编译平台
网络·智能路由器·编译·openwrt·刷机·软路由·固件
hai3152475432 分钟前
FiveOS V3.0 交付(微服务器操作系统版 · 物理合规修正
linux·人工智能·spring boot·后端·神经网络·机器学习
network_tester2 分钟前
TSN台架系统测试:从实验室验证到智能驾驶落地的关键桥梁
网络·网络协议·5g·汽车·信息与通信·信号处理·tcpdump
兰令水4 分钟前
leecodecode【二叉树排序+最近公共祖先】【2026.6.2打卡-java版本】
java·数据结构·算法·leetcode
人道领域4 分钟前
【LeetCode刷题日记】77&&216.回溯算法剪枝优化在组合问题中的应用
java·算法·leetcode
Deepoch8 分钟前
Deepoc数学大模型:以低幻觉特性护航半导体精准设计与制造
大数据·人工智能·算法·半导体·deepoc
诸葛务农8 分钟前
共沸脱水技术及其在光刻胶用PGMEA纯化中的应用(上)
java·数据库·算法
£suPerpanda9 分钟前
AtCoder Beginner Contest 453
c++·算法
文青小兵9 分钟前
Linux云计算——docker 告警(六)
linux·运维·docker·云计算·prometheus