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

}

相关推荐
wypywyp23 分钟前
2.虚拟机一直显示黑屏,无法打开,可能是分配的硬盘空间不够
linux·运维·服务器
SongYuLong的博客35 分钟前
TL-WR710N-V2.1 硬改刷机OpenWRT源码编译固件
linux·物联网·网络协议
AlfredZhao38 分钟前
Docker 快速入门:手把手教你打包 Python 应用
linux·docker·podman
tobias.b1 小时前
408真题解析-2010-7-数据结构-无向连通图
数据结构·算法·图论·计算机考研·408真题解析
HIT_Weston2 小时前
107、【Ubuntu】【Hugo】搭建私人博客:模糊搜索 Fuse.js(三)
linux·javascript·ubuntu
良木生香2 小时前
【鼠鼠优选算法-双指针】003:快乐数 & 004:盛水最多的容器
算法
Cx330❀2 小时前
【优选算法必刷100题】第41-42题(模拟):Z 字形变换,外观数列
c++·算法
沃尔特。2 小时前
直流无刷电机FOC控制算法
c语言·stm32·嵌入式硬件·算法
CW32生态社区2 小时前
CW32L012的PID温度控制——算法基础
单片机·嵌入式硬件·算法·pid·cw32
Cx330❀2 小时前
【优选算法必刷100题】第038题(位运算):消失的两个数字
开发语言·c++·算法·leetcode·面试