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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/67105.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 命令大全(下)

Linux 命令大全&#xff08;上&#xff09; 本文目录 6. 网络通讯 常用命令6.1 ssh 命令 – 安全的远程连接服务器6.1.1 含义6.1.2 语法格式6.1.3 常用参数6.1.4 参考示例 6.2 netstat 命令 – 显示网络状态6.2.1 含义6.2.2 语法格式6.2.3 常用参数6.2.4 参考示例 6.3 dhclient…

Windows10+OpenCL环境配置

一.查看自己电脑的显卡配置支不支持OpenCL 方法1&#xff1a;我的电脑用的是intel的显卡&#xff0c;具体查看方式&#xff1a;桌面右键 → 英特尔显卡设置 → 选项与支持打开英特尔 显卡控制中心。如果找不到&#xff0c;尝试方法2 方法 2&#xff1a;Windows 开始菜单 在 Wi…

【第一阶段】kotlin的when表达式

1.Java 的if /when是语句 kotlin的if/when是表达式&#xff0c;表达式是有返回值的 java中void是个关键字&#xff0c;Unit在kotlin中是个类 2.当使用when语句的时候必须有一个不满足的值即else: fun main() {var week:Int5val info when(week){1->"今天是星期一"…

15.2 【Linux】仅执行一次的工作调度

15.2.1 atd 的启动与 at 运行的方式 要使用单一工作调度时&#xff0c;我们的 Linux 系统上面必须要有负责这个调度的服务&#xff0c;那就是 atd 。 不过并非所有的 Linux distributions 都默认会把他打开的&#xff0c;所以&#xff0c;某些时刻我们必须要手动将他启用才行。…

百度、NVIDIA、Intel……各大厂商集结,共话文心与飞桨共享生态下的大模型训推部署创新实践计划...

由深度学习技术及应用国家工程研究中心主办、百度飞桨和文心大模型承办的WAVE SUMMIT 2023峰会重磅来袭&#xff01;本届峰会聚焦AI技术、产业生态、未来趋势等主要方向&#xff0c;产、学、研、用各界大咖将围绕深度学习及大模型技术的发展与未来&#xff0c;带来行业前瞻洞察…

Nacos服务治理—负载均衡

引入负载均衡 在消费方引入负载均衡机制&#xff0c;同时简化获取服务提供者信息的流程 Spring Cloud引入组件LoadBalance实现负载均衡 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web<…

Vue 实现重定向、404和路由钩子(六)

一、重定向 1.1 修改 Main.vue <template><div><el-container><el-aside width"200px"><el-menu :default-openeds"[1]"><el-submenu index"1"><template slot"title"><i class"…

unity vscode 代码关联 跳转 BUG

一早打开电脑发现代码关联失效了&#xff0c;目测可能跟昨天一些插件更新有关 结论 就这货&#xff0c;开了就没法提示代码关联&#xff0c;估计预览版全是BUG。 另一个坑 同期有个unity插件也是预览版&#xff0c;“非常好使”&#xff0c;当场去世。评论点开有好几个人说用…

python的gui界面程序爬虫,python的gui界面怎么打开

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python的gui界面怎么打开&#xff0c;python的gui界面程序爬虫&#xff0c;今天让我们一起来看看吧&#xff01; Python支持多种图形界面的第三方库&#xff0c;包括&#xff1a; wxWidgets Qt GTK Tkinter&#xf…

[保研/考研机试] KY187 二进制数 北京邮电大学复试上机题 C++实现

描述 大家都知道&#xff0c;数据在计算机里中存储是以二进制的形式存储的。 有一天&#xff0c;小明学了C语言之后&#xff0c;他想知道一个类型为unsigned int 类型的数字&#xff0c;存储在计算机中的二进制串是什么样子的。 你能帮帮小明吗&#xff1f;并且&#xff0c;小…

我的第一个创作纪念日

机缘 时间总是匆匆流逝&#xff0c;转眼间&#xff0c;我已经在前端领域迈入了第一个创作纪念日。回首往事&#xff0c;每一个创作的瞬间都如同一幅幅精彩的画面&#xff0c;在我心中留下深刻的印记。 日常 五年前&#xff0c;我踏入了前端职业的大门&#xff0c;初涉这片陌…

IP路由基础+OSPF 基础

IP路由 RIB与FIB RIB&#xff1a;Routing Information Base&#xff0c;路由信息库 &#xff0c;路由器的控制平面 FIB&#xff1a;Forwarding Information Base&#xff0c;转发信息库&#xff0c;路由器的数据平面 路由信息库主要是记录直连路由以及协议宣告的路由信息&am…

vue : 无法加载文件 C:\Users\…\npm\vue.ps1,因为在此系统上禁止运行脚本。

在 PowerShell 中创建 vue 项目时&#xff0c;出现了以下错误导致创建失败&#xff1a;vue : 无法加载文件 C:\Users\…\npm\vue.ps1&#xff0c;因为在此系统上禁止运行脚本。 报错原因 用户权限不足导致无法加载文件&#xff0c;以管理员身份运行终端或者 PowerShell 也可…

【架构设计】如何设计一个高性能短链系统

一、前言 所谓系统设计&#xff0c;就是给一个场景&#xff0c;让你给出对应的架构设计&#xff0c;需要考虑哪些问题&#xff0c;采用什么方案解决。很多面试官喜欢出这么一道题来考验你的知识广度和逻辑思考能力。 虽然各个系统千差万别&#xff0c;但是设计思想基本一致&a…

Python-OpenCV中的图像处理-图像金字塔

Python-OpenCV中的图像处理-图像金字塔 图像金字塔高斯金字塔拉普拉斯金字塔 金字塔图像融合 图像金字塔 同一图像的不同分辨率的子图集合&#xff0c;如果把最大的图像放在底部&#xff0c;最小的放在顶部&#xff0c;看起来像一座金字塔&#xff0c;故而得名图像金字塔。cv2…

剑指 Offer 30. 包含min函数的栈

题目描述 定义栈的数据结构&#xff0c;请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中&#xff0c;调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例 思路 新开一个辅助栈记录不严格递增序列&#xff0c;栈顶元素始终为栈内的最小值&#xff0c;注意多个…

flask使用cookie (设置cookie与查看cookie内容)

1.flask包cookie的使用 设置cookie app.route(/set_cookie) def set_cookie():resp make_response(Setting cookie)resp.set_cookie(username, John)return resp查看cookie: app.route(/get_cookie) def get_cookie():username request.cookies.get(username)return Welco…

CSS基础介绍笔记1

官方文档 CSS指的是层叠样式&#xff08;Cascading Style Sheets&#xff09;地址&#xff1a;CSS 教程离线文档&#xff1a;放大放小&#xff1a;ctrl鼠标滚动为什么需要css&#xff1a;简化修改HTML元素的样式&#xff1b;将html页面的内容与样式分离提高web开发的工作效率&…

安装程序报错问题解决 -2147287037 <<30005>> 2203

本文如下报错适用&#xff1a; 一、The installer has encountered an unexpected error installing this package. Thismay indicate a problem with this package. The error code is 2203 二、错误 2203.数据库&#xff1a; C:\WINDOWS\Installer\inprogressinstallinfo.i…

Vue2-简介、模板语法、数据绑定、MVVM、数据代理、事件处理

&#x1f954;&#xff1a;成功之后就能光明正大地回望所有苦难 VUE-Day1 Vue简介1、Vue是什么&#xff1f;2、谁开发的&#xff1f; 发展历程&#xff1f;3、Vue的特点4、容器和实例、实例中的el和data总结 Vue模板语法插值语法指令语法 数据绑定1.单向数据绑定&#xff08;v-…