zoukankan      html  css  js  c++  java
  • php multicast多播实现详解

    什么是多播?

    网络中存在3中传播形式,单播,广播,多播。
    
     1. 单播 : 就是1->1
     2. 广播 : 1->多(广播域内)
     3. 多播 : 1->组(一组ip)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    依赖于ip协议实现

    首先我们抛出一个问题,要是要你自己在网络中实现这种机制,你会怎么实现呢。
    哈哈,我的设计大概会是这样。
    设计思路 : 因为网络是通过ip协议来通信的,那我自然想到是否可以通过某一类标记来标志这种形式就是多播呢,答案肯定是可以的,其实别人也是这样实现的。下面看一张图。
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    这里写图片描述

    D类IP地址(224.0.0.0到239.255.255.255)标记为多播地址。
    是吧,别人也这样实现啦。
    下面贴出php代码来给大家证明一把。
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    multicast_client.php文件

        $len = 80;
        $flags = 0;
        $from = "";
        $port = 14446;
        $group_params = array(
            "group" => "228.5.6.7",
            "interface" => "eth0"
            );
        $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
        socket_bind($socket, '0.0.0.0', $port);
        socket_set_option($socket, IPPROTO_IP, MCAST_JOIN_GROUP, $group_params);
        socket_recvfrom($socket, $recvStr, $len, $flags, $from, $port);
        echo "Received" . $recvStr . " from " . $from;
        socket_close($socket);
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    multicast_server.php文件

        $port = 14446;
        $group_ip = '228.5.6.7';
        $group_params = array(
            "group" => $group_ip,
            "interface" => "eth0"
            );
    
        $send_msg = "hello , i am multicast server";
        $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    
        socket_set_option($socket, IPPROTO_IP, MCAST_JOIN_GROUP, $group_params);
        socket_sendto($socket, $send_msg, strlen($send_msg), 0, $group_ip, $port);
        socket_close($socket);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    这里写图片描述

    这里写图片描述

  • 相关阅读:
    Windows 7 下安装 docker 应用容器引擎
    jmeter压力测试
    1分钟为Win10瘦身!把吃掉的硬盘找回来
    关于IIS应用程序池的默认参数设置解决
    IIS将应用程序池配置为在计划时间执行回收 (IIS 7)
    什么是IIS应用程序池
    WinCE知识介绍
    odoo12 通过一个字段控制另一个Many2one字段的domain
    odoo12 数据库过期问题
    odoo12
  • 原文地址:https://www.cnblogs.com/caicaizi/p/7290710.html
Copyright © 2011-2022 走看看