多进程利用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_buf[20] = {0};

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

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

}

}

else

{

while(1)

{

char t_buf[20] = {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_buf[20] = {0};

while(1)

{

scanf("%s",t_buf);

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

}

}

else

{

char r_buf[20] = {0};

while(1)

{

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

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

}

}

close(serfd);

return 0;

}

相关推荐
Rust研习社4 分钟前
使用 Tonic 构建高性能异步 gRPC 服务
开发语言·网络·后端·http·rust
一个行走的民9 分钟前
深度剖析 Ceph PG 分裂机制:原理、底层、实操、影响、线上避坑(最全完整版)
ceph·算法
WolfGang00732113 分钟前
代码随想录算法训练营 Day46 | 图论 part04
算法·图论
思麟呀16 分钟前
Epoll的学习,在select和poll的基础上
网络·数据库·sql·学习·tcp/ip
拾-光19 分钟前
LTX-Video 2.3 实战:用图片生成视频,消费级显卡也能跑的开源 I2V 模型(GPT Image 2)
java·人工智能·python·深度学习·算法·机器学习·音视频
小O的算法实验室23 分钟前
2026年ESWA,考虑曲率约束路径优化的 Dubins-RRT* 运动规划算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
jllllyuz24 分钟前
灰狼算法优化的LSSVR程序
算法
坚持就完事了26 分钟前
Linux中的cp命令
linux·运维·服务器
切糕师学AI26 分钟前
使用 gdisk 快速判断硬盘分区表类型:是 GPT 还是 MBR?
linux·硬盘分区表·gdisk
2301_8009769328 分钟前
Linux的基本命令
linux·运维·服务器