当前位置: 首页 > news >正文

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

 

http://www.lryc.cn/news/116781.html

相关文章:

  • git 报错 protocol ‘https‘ is not supported解决
  • 启动RocketMQ报错
  • 【Spring Boot系列】-Spring Boot过滤器Filter
  • Leetcode-每日一题【剑指 Offer 14- I. 剪绳子】
  • 【图论】单源最短路问题
  • 物理层扩展以太网
  • Llama 2 with langchain项目详解(一)
  • IDEA全局设置MyBatis中写SQL语句提示
  • Linux 内存管理
  • oracle怎样给某个普通用户授予杀自己用户会话的权限
  • redis的主从复制,哨兵和cluster集群
  • Crowd-Robot Interaction 论文阅读
  • 什么是LIMS系统,LIMS实验室管理系统
  • Python Opencv实践 - 图像属性相关
  • PCB制造中铜厚度的重要性
  • 浅谈高校宿舍水电表远程智能管理的研究与应用
  • 无货源跨境电商购物平台快速搭建(微商城、小程序、APP、网站)
  • 力扣:57. 插入区间(Python3)
  • List和数组互转方法以及踩坑点
  • css3背景渐变
  • windows 安装免费3用户ccproxy ubuntu 代理上网
  • B树的插入与删除过程
  • 【二分】CF1623 C
  • redis五大类型分析--list(1)
  • 【多重信号分类】超分辨率测向方法——依赖于将观测空间分解为噪声子空间和源/信号子空间的方法具有高分辨率(HR)并产生准确的估计(Matlab代码实现)
  • 【Express.js】集成Websocket
  • MachineLearningWu_14/P65-P69_Multiclass
  • 深入理解高并发编程 - SimpleDateFormat 类的线程安全问题
  • 接口幂等性实现方式
  • redis高可用之持久化