当前位置: 首页 > 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;
}

 

相关文章:

多进程利用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 &quo…...

git 报错 protocol ‘https‘ is not supported解决

报错原因&#xff1a;选择不了其他分支代码&#xff0c;甚至都看不到其他分支&#xff0c;我这边解决了两次报错&#xff0c;情况如下&#xff1a; 第一种报错&#xff1a; idea中刷新分支报错如下&#xff1a; Fetch Failed protocol https is not supported 话不多说&#…...

启动RocketMQ报错

说明&#xff1a;启动RocketMQ消费者时&#xff0c;报以下错误&#xff1a;java.lang.IllegalStateException&#xff1a;Failed to start RocketMQ push consumer. 解决&#xff1a;看下所有的监听器类&#xff0c;检查是不是有相同的消费者组名&#xff0c;注释掉其中一个即可…...

【Spring Boot系列】-Spring Boot过滤器Filter

【Spring Boot系列】-Spring Boot过滤器Filter 文章目录 【Spring Boot系列】-Spring Boot过滤器Filter一、概述二、Filter&#xff08;过滤器&#xff09;数据流程三、Spring Boot 过滤器生命周期四、使用注解方式实现过滤器(WebFilter)4.1. 在springboot 启动类添加该注解Ser…...

Leetcode-每日一题【剑指 Offer 14- I. 剪绳子】

题目 给你一根长度为 n 的绳子&#xff0c;请把绳子剪成整数长度的 m 段&#xff08;m、n都是整数&#xff0c;n>1并且m>1&#xff09;&#xff0c;每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少&#xff1f;例如&#xff0…...

【图论】单源最短路问题

Dijkstra算法 -- 这是我职业生涯中唯一一个会写&#xff0c;却叫不上名字的算法 Dijkstra算法是一种单源最短路径算法&#xff0c;用于找出图中从一个源点到其他所有点的最短路径。该算法的原理是采用贪心策略&#xff0c;每次将距离源点最近的点加入到已确定最短路径的集合中…...

物理层扩展以太网

扩展站点与集线器之间的距离&#xff1a;   在10BASE-T星型以太网中&#xff0c;可使用光纤和一对光纤调制解调器来扩展站点与集线器之间的距离。   为站点和集线器各增加一个用于电信号和光信息号转换的光纤调制解调器&#xff0c;以及他们之间的通信光纤。 扩展共享式以太…...

Llama 2 with langchain项目详解(一)

Llama 2 with langchain项目详解(一) 2023年2月25日,美国Meta公司发布了Llama 1开源大模型。随后,于2023年7月18日,Meta公司发布了Llama 2开源大模型,该系列包括了70亿、130亿和700亿等不同参数规模的模型。相较于Llama 1,Llama 2的训练数据增加了40%,上下文长度提升至…...

IDEA全局设置MyBatis中写SQL语句提示

把这两个设置改成MySQL即可&#xff1a;...

Linux 内存管理

顾名思义&#xff0c;Liunx内存管理子系统在系统中负责管理内存。它包括虚拟内存管理、段与页的实现、内核态与用户空的空间分配、将文件映射到进程空间等&#xff0c;很多很多酷炫的功能。 Linux内存管理是一个非常复杂的系统&#xff0c;它有非常多的可配置项。大部份这些配置…...

oracle怎样给某个普通用户授予杀自己用户会话的权限

一 问题描述 想给某个普通用户授予杀掉自己会话的权限 二 解决办法 2.1 用sys用户创建杀会话的存储过程 create or replace procedure scott_p_kill_session( v_sid number, v_serial number )asv_varchar2 varchar2(100);beginif v_sid is not null and v_serial is not n…...

redis的主从复制,哨兵和cluster集群

目录 一、redis的高可用 1&#xff09;redis高可用的概念 2&#xff09;Redis的高可用技术 二、redis主从复制 1&#xff09;主从复制的作用 2&#xff09;主从复制流程 三、redis一主二从的部署 实验组件 实验步骤 环境准备 修改内核参数 安装 Redis 创建redis工…...

Crowd-Robot Interaction 论文阅读

论文信息 题目&#xff1a;Crowd-Robot Interaction:Crowd-aware Robot Navigation with Attention-based Deep Reinforcement Learning 作者&#xff1a;Changan Chen, Y uejiang Liu 代码地址&#xff1a;https://github.com/vita-epfl/CrowdNav 来源&#xff1a;arXiv 时间…...

什么是LIMS系统,LIMS实验室管理系统

LIMS是实验室信息管理系统&#xff0c;全称是Laboratory Information Management System&#xff0c;是将以数据库为核心的信息化技术与实验室管理需求相结合的信息化管理工具。它是由计算机硬件和应用软件组成&#xff0c;能够完成实验室数据和信息的收集、分析、报告和管理&a…...

Python Opencv实践 - 图像属性相关

import numpy as np import cv2 as cv import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) plt.imshow(img[:,:,::-1])#像素操作 pixel img[320,370] print(pixel)#只获取蓝色通道的值 pixel_blue img[320,370,0]…...

PCB制造中铜厚度的重要性

电子产品中的PCB是现代电子设备中不可或缺的一部分。在PCB制造过程中&#xff0c;铜厚度是一个非常重要的因素。正确的铜厚度可以保证电路板的质量和性能&#xff0c;同时也影响着电子产品的可靠性和稳定性。 一般我们常见的铜厚有17.5um&#xff08;0.5oz&#xff09;&#x…...

浅谈高校宿舍水电表远程智能管理的研究与应用

安科瑞 华楠 摘要&#xff1a;本系统的设计是基于485总线技术与TCP/IP网络技术相结合的方式来实现的&#xff0c;充分考虑了目前高校后勤水电表管理控制的实际情况&#xff0c;以传输可靠性高、技术成熟、成本低的485总线技术为基础&#xff0c;并与应用广泛的TCP/IP网络相结合…...

无货源跨境电商购物平台快速搭建(微商城、小程序、APP、网站)

无货源跨境电商购物平台的快速搭建可以通过以下步骤完成&#xff0c;并且可以同时开发微商城、小程序、APP和网站以满足不同用户的需求。 第一步&#xff1a;需求分析 在搭建之前&#xff0c;需要对平台的需求进行详细的分析。包括用户需求、功能需求、技术需求等等。这一步是…...

力扣:57. 插入区间(Python3)

题目&#xff1a; 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表。 在列表中插入一个新的区间&#xff0c;你需要确保列表中的区间仍然有序且不重叠&#xff08;如果有必要的话&#xff0c;可以合并区间&#xff09;。 来源&#xff1a;力扣&#xff08;LeetC…...

List和数组互转方法以及踩坑点

一、数组转List 1. 使用for循环逐个添加 String[] array {"A", "B", "C"}; List<String> list new ArrayList<>(); for (String element : array) {list.add(element); }2. 使用Arrays.asList(arr) String[] array {"A&q…...

VideoAgentTrek-ScreenFilter API接口全解析:参数、返回值与错误码指南

VideoAgentTrek-ScreenFilter API接口全解析&#xff1a;参数、返回值与错误码指南 最近在折腾一个视频内容审核的项目&#xff0c;需要自动过滤掉一些不合适的画面。找了一圈&#xff0c;发现VideoAgentTrek-ScreenFilter这个模型挺对路&#xff0c;它专门用来分析视频内容&a…...

dom-to-image技术突破:浏览器端DOM渲染的图像化解决方案

dom-to-image技术突破&#xff1a;浏览器端DOM渲染的图像化解决方案 【免费下载链接】dom-to-image Generates an image from a DOM node using HTML5 canvas 项目地址: https://gitcode.com/gh_mirrors/do/dom-to-image 在现代Web开发中&#xff0c;将DOM元素转换为图像…...

太阳能电池缺陷检测数据集:2624张电致发光图像的高性能AI训练基准

太阳能电池缺陷检测数据集&#xff1a;2624张电致发光图像的高性能AI训练基准 【免费下载链接】elpv-dataset A dataset of functional and defective solar cells extracted from EL images of solar modules 项目地址: https://gitcode.com/gh_mirrors/el/elpv-dataset …...

D3KeyHelper:5分钟掌握暗黑3专业宏工具,告别手动疲劳

D3KeyHelper&#xff1a;5分钟掌握暗黑3专业宏工具&#xff0c;告别手动疲劳 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 如果你还在为暗黑破坏神…...

AI原生软件技术债爆发前夜:92%的GenAI项目在V1.5版本后陷入交付瘫痪,你中招了吗?

第一章&#xff1a;AI原生软件技术债的本质与临界征兆 2026奇点智能技术大会(https://ml-summit.org) AI原生软件的技术债并非传统工程债务的简单延伸&#xff0c;而是由模型-代码耦合失衡、数据契约隐式化、推理路径不可观测等结构性缺陷共同催生的“认知性负债”。当开发团队…...

35个专业级Adobe Illustrator脚本:彻底自动化你的设计工作流

35个专业级Adobe Illustrator脚本&#xff1a;彻底自动化你的设计工作流 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Illustrator中重复性的手动操作消耗大量时间而烦恼吗…...

论文图表不用手画!Paperxie AI 科研绘图:让学术可视化效率拉满

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/科研绘图https://www.paperxie.cn/drawinghttps://www.paperxie.cn/drawing 一、 科研人的 “画图焦虑”&#xff0c;终于有解了 做科研、写论文&#xff0c;最磨人的从来不是实验本身&#xff0c;而是画图…...

TI mmWave Demo Visualizer 3.5配置指南:从安装到点云可视化(附常见问题解决)

TI mmWave Demo Visualizer 3.5全流程实战&#xff1a;环境搭建与点云可视化深度解析 第一次接触毫米波雷达开发时&#xff0c;最让人头疼的往往不是算法本身&#xff0c;而是如何让开发板与可视化工具正常对话。TI的mmWave Demo Visualizer作为连接硬件与开发者的桥梁&#xf…...

Maven进阶:精准打包指定模块及其依赖的高效实践

1. 为什么需要精准打包模块&#xff1f; 在微服务架构中&#xff0c;一个典型的SpringCloud项目往往包含数十个甚至上百个模块。想象一下&#xff0c;你正在开发一个电商系统&#xff0c;其中包含用户服务、商品服务、订单服务、支付服务等核心模块。每次修改完订单服务的代码…...

从注册到调用:手把手玩转SiliconFlow与DeepSeek-R1模型

1. 硅基流动平台注册指南 第一次接触SiliconFlow&#xff08;硅基流动&#xff09;时&#xff0c;我也被它简洁的界面和强大的模型支持所吸引。这个平台最大的优势在于它集成了包括DeepSeek-R1在内的多个热门开源模型&#xff0c;而且调用方式与OpenAI API高度兼容&#xff0c;…...