首页 > 其他分享 >k8s笔记17(组播测试代码)

k8s笔记17(组播测试代码)

时间:2024-01-28 22:32:58浏览次数:32  
标签:多播 addr 0.100 int MCAST 17 测试代码 k8s 232.0

摘要:

mc_svcttl;mc_clittl;mcjoin;smcrouted;omping

测试OK:(前提k8s-node07和k8s-node08运行smcrouted)

---> k8s-node07    smcroute.conf 
mgroup from enp4s0f0 group 232.0.0.100
mroute from enp4s0f0        group 232.0.0.100 to cali1806a26ae62
mroute from cali1806a26ae62 group 232.0.0.100 to enp4s0f0 
---> k8s-node08    smcroute.conf 
mgroup from enp4s0f0 group 232.0.0.100
mroute from enp4s0f0         group 232.0.0.100 to califc3399243d8
mroute from califc3399243d8  group 232.0.0.100 to enp4s0f0 
---
omping-a   172.27.29.185   k8s-node07 
omping-b   172.19.199.175  k8s-node08
root@omping-a:/# mc_svcttl       (!!!编译的代码组播地址改成了232.0.0.100)
[root@k8s-node07 home]# mcjoin  -j 234.0.0.100 -p 8888
[root@k8s-node08 ~]# mcjoin  -j 234.0.0.100 -p 8888  
root@omping-b:/# mcjoin  -j 234.0.0.100 -p 8888  
root@omping-b:/# mc_clittl        (!!!编译的代码组播地址改成了232.0.0.100)
(SO_REUSEADDR)Recv 0st message from server:BROADCAST TEST DATA 232.0.0.100:8888  TTL=64
  • 但是,使用omping工具不太好用,显示是单播unicast,但实际组播也通。
root@omping-a:/# omping -m 232.0.0.100 -p 8888 172.27.29.185 172.19.199.175 
172.19.199.175 : waiting for response msg
172.19.199.175 : joined (S,G) = (*, 232.0.0.100), pinging
172.19.199.175 :   unicast, seq=1, size=69 bytes, dist=2, time=0.842ms
root@omping-b:/# omping -m 232.0.0.100 -p 8888 172.27.29.185 172.19.199.175 
172.27.29.185 : joined (S,G) = (*, 232.0.0.100), pinging
172.27.29.185 :   unicast, seq=1, size=69 bytes, dist=2, time=0.633ms
root@omping-b:/# mc_clittl 
(SO_REUSEADDR)Recv 0st message from server:I
root@omping-b:/# mcjoin -j 232.0.0.100 -p 8888    //能收到字母:I

1、多播服务程序:MCAST_ADDR "234.0.0.100"    MCAST_PORT 8888

/*
 * *broadcast_server.c - 多播服务程序
 * */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define MCAST_PORT 8888
#define MCAST_ADDR "234.0.0.100"   /*一个局部连接多播地址,路由器不进行转发*/
#define MCAST_DATA "BROADCAST TEST DATA 234.0.0.100:8888"      /*多播发送的数据*/
#define MCAST_INTERVAL 5                      /*发送间隔时间*/

int main(int argc, char*argv)
{
    int s;
    struct sockaddr_in mcast_addr;     
    s = socket(AF_INET, SOCK_DGRAM, 0);         /*建立套接字*/

    if (s == -1)
    {
        perror("socket()");
        return -1;
    }

    memset(&mcast_addr, 0, sizeof(mcast_addr));/*初始化IP多播地址为0*/
	
    mcast_addr.sin_family = AF_INET;                /*设置协议族类行为AF*/
    mcast_addr.sin_addr.s_addr = inet_addr(MCAST_ADDR);/*设置多播IP地址*/
    mcast_addr.sin_port = htons(MCAST_PORT);        /*设置多播端口*/

                                                    /*向多播地址发送数据*/
    while(1) {
        int n = sendto(s,                     /*套接字描述符*/
                       MCAST_DATA,            /*数据*/
                       sizeof(MCAST_DATA),    /*长度*/
                       0,
                       (struct sockaddr*)&mcast_addr,
                       sizeof(mcast_addr)) ;
        if( n < 0)
        {
            perror("sendto()");
            return -2;
        }      
        sleep(MCAST_INTERVAL);             /*等待一段时间*/
    }
    return 0;
}

2、多播的客户端:MCAST_ADDR "234.0.0.100"   MCAST_PORT 8888

/*
 * *broadcast_client.c - 多播的客户端
 * */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define MCAST_PORT 8888
#define MCAST_ADDR "234.0.0.100"     /*234组播地址全局有效,路由器进行转发*/
#define MCAST_INTERVAL 5                        /*发送间隔时间*/
#define BUFF_SIZE 256                           /*接收缓冲区大小*/

int main(int argc, char*argv[])
{  
    int s;                                      /*套接字文件描述符*/
    struct sockaddr_in local_addr;              /*本地地址*/
    int err = -1;

    s = socket(AF_INET, SOCK_DGRAM, 0);     /*建立套接字*/

    if (s == -1)
    {
        perror("socket()");
        return -1;
    }    
/*设定 SO_REUSEADDR,允许多个应用绑定同一个本地端口接收数据包*/
    int reuse = 1;
    if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) < 0)
	{
          perror("Setting SO_REUSEADDR error");
          close(s);
          exit(1);	
	}


	/*初始化地址*/
    memset(&local_addr, 0, sizeof(local_addr));

    local_addr.sin_family = AF_INET;
    local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    local_addr.sin_port = htons(MCAST_PORT); 
	
/*bind绑定本地端口,IP为INADDR_ANY,从而能接收组播数据包。*/
    err = bind(s,(struct sockaddr*)&local_addr, sizeof(local_addr)) ;

    if(err < 0)
    {
        perror("bind()");
        return -2;
    }   
                                                /*设置回环许可*/
    int loop = 1;

    err = setsockopt(s,IPPROTO_IP, IP_MULTICAST_LOOP,&loop, sizeof(loop));

    if(err < 0)
    {
        perror("setsockopt():IP_MULTICAST_LOOP");
        return -3;
    }
  
    struct ip_mreq mreq;                                    /*加入多播组*/
    mreq.imr_multiaddr.s_addr = inet_addr(MCAST_ADDR); /*多播地址*/
    mreq.imr_interface.s_addr = htonl(INADDR_ANY); /*网络接口为默认*/
 /*将本机加入多播组*/
    err = setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,&mreq, sizeof
    (mreq));

    if (err < 0)
    {
        perror("setsockopt():IP_ADD_MEMBERSHIP");
        return -4;
    }
   
    int times = 0;
    int addr_len = 0;
    char buff[BUFF_SIZE];
    int n = 0;

	
                                        /*循环接收多播组的消息,5次后退出*/
    for(times = 0;times<15;times++)
    {
        addr_len = sizeof(local_addr);
        memset(buff, 0, BUFF_SIZE);                 /*清空接收缓冲区*/
                                                    /*接收数据*/
        n = recvfrom(s, buff, BUFF_SIZE, 0,(struct sockaddr*)&local_addr,
        &addr_len);

        if( n== -1)
        {
            perror("recvfrom()");
        }
                                                    /*打印信息*/
        printf("(SO_REUSEADDR)Recv %dst message from server:%s\n", times, buff);
        sleep(MCAST_INTERVAL);
    }
                                                    /*退出多播组*/
    err = setsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP,&mreq, sizeof
    (mreq));

    close(s);
    return 0;

}




标签:多播,addr,0.100,int,MCAST,17,测试代码,k8s,232.0
From: https://blog.51cto.com/mizy/9454247

相关文章

  • hihocoder#1707 麻烦的第K大问题
    由区间第\(x\timesy\)大又到多重集第\(k\)大从普通的元素到我们要求的\(ans\)之间是有大小关系的(在区间内\(<-->\)区间第\(x\timesy\)大\(<-->\)多重集内第\(k\)大)再加上二分时产生的单调性:此时设二分的值为\(mid\),标记数组为\(b[]\)\[b_i=\begin{cases}......
  • NSSCTF Round#17 Basic CRYPTO
    Level_1题目Level_1.py(我把参数整理了一下,看着舒服)#真签到题fromCrypto.Util.numberimportbytes_to_long,getPrimefromsecretimportgetflagp=getPrime(1024)q=getPrime(1024)n=p*qm=bytes_to_long(getflag().encode())c1=pow(m,p,n)c2=pow(m,......
  • k8s之helm部署mysql集群
    一、简介HelmHelm是Kubernetes的包管理器。ChartHelm使用的包格式称为chart。chart存储在ChartRepository。chart就是一个描述Kubernetes相关资源的文件集合。单个chart可以用来部署一些简单的,类似于memcachepod,或者某些复杂的HTTP服务器以及web全栈应用、数据库、缓......
  • 2024最新苹果iOS17.3微信分身详解分享
    微信是目前最流行的社交软件之一,拥有庞大的用户群体。然而,对于一些需要同时使用多个微信账号的用户来说,使用官方版微信就显得有些不方便。iOS分身微信软件可以解决这个问题,它可以让用户在同一台设备上同时登录多个微信账号,从而实现工作生活两不误。iOS分身微信软件的优势iOS......
  • Windows Server 2012 R2 安装 Visual C++ Redistributable (VC_redist.x64) 失败 0x80
    PHP8需要 VisualC++RedistributableforVisualStudio2019,但怎么都装不上,有个0x80240017-未指定的错误。 看日志 Windows8.1-KB2999226-x64.msu好像有补丁安装失败了,网上找到一篇解决办法:https://blog.51cto.com/u_12701820/3032471能成功安装VC,但是PHP8无法......
  • 谭浩强 第5版 第5章 第17题
    题目:两个乒乓球队进行比赛,各出三人。甲队为A,B,C3人,乙队为X,Y,Z3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序找出3对赛车的名单。分析:通过分析题目,我们可以很直观地想到:利用3个for循环,遍历一遍。直到满足限制条件时跳出来即可。题目中有2......
  • 在K8S中,deploy的yaml如何编写?
    在Kubernetes(简称K8s)中,编写一个Deployment的YAML文件通常包括以下几个关键部分:点击查看代码apiVersion:apps/v1#KubernetesAPI版本,根据你的集群版本选择合适的API版本kind:Deployment#资源类型为Deploymentmetadata:name:my-deployment#部署的名称namesp......
  • iOS 17.4 测试版包含大模型相关代码
    外界普遍预计苹果将在6月份通过iOS18推出主要的新人工智能功能。不过根据9to5Mac的报道,他们在iOS17.4第一个测试版中发现的代码表明,苹果正在开发由大语言模型技术支持的Siri新版本,并得到了其他来源的一些帮助。所谓其他来源是指苹果似乎正在使用OpenAI的ChatGPTA......
  • 在K8S中,api-server究竟是如何实现高可用?
    在Kubernetes(K8S)中,实现APIServer(kube-apiserver)的高可用性是构建稳定和可靠的集群架构的关键部分。以下是KubernetesAPIServer实现高可用的主要方法:冗余部署:通常会部署多个APIServer实例,并且它们之间是无状态的,这样任何一个实例崩溃或维护时,其他实例可以继续处理请求。......
  • 在K8S中,二进制与Kubeadm安装有何区别?
    在Kubernetes(K8S)的部署中,二进制安装和使用Kubeadm工具进行安装的主要区别在于复杂性和灵活性:二进制安装手动与细致:通过下载官方提供的各个组件(如kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kubectl等)的二进制文件并手动配置每个组件的方式进行......