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

}

相关推荐
像素之间3 小时前
HTTP之content-disposition
网络·网络协议·http
2501_915909064 小时前
tcpdump 抓包数据分析实战,命令、过滤、常见故障定位与真机补充流程
网络·测试工具·ios·小程序·uni-app·iphone·tcpdump
未来之窗软件服务5 小时前
自己写算法(九)网页数字动画函数——东方仙盟化神期
前端·javascript·算法·仙盟创梦ide·东方仙盟·东方仙盟算法
路由侠内网穿透5 小时前
本地部署开源持续集成和持续部署系统 Woodpecker CI 并实现外部访问
服务器·网络·windows·ci/cd·开源
程序猿小三5 小时前
Linux下基于关键词文件搜索
linux·运维·服务器
豐儀麟阁贵6 小时前
基本数据类型
java·算法
光储圈6 小时前
光伏安全协议-安全责任协议书8篇
网络·安全
虚拟指尖6 小时前
Ubuntu编译安装COLMAP【实测编译成功】
linux·运维·ubuntu
刘某的Cloud7 小时前
parted磁盘管理
linux·运维·系统·parted
啊?啊?7 小时前
4 解锁 Linux 操作新姿势:man、grep、tar ,创建用户及添加权限等 10 大实用命令详解
linux·服务器·实用指令