组播

【1】组播
     单播方式只能发给一个接收方。


     广播方式发给所有的主机。过多的广播会大量占用网络带宽,造成广播风暴,影响正常的通信。


     组播(又称为多播)是一种折中的方式。只有加入某个多播组的主机才能收到数据。


     多播方式既可以发给多个主机,又能避免象广播那样带来过多的负载(每台主机要到传输层才能判断广播包是否要处理)


【2】网络地址
     A类地址
     第1字节为网络地址,其他3个字节为主机地址。第1字节的最高位固定为0
     1.0.0.1 – 126.255.255.255


     0000 0000 -- 0111 1111   0 到 127   
     0 网段,作为保留地址
     127 网段 ,作为保留地址


     0.0.0.0  代表任意的本机IP地址


     B类地址
     第1字节和第2字节是网络地址,其他2个字节是主机地址。第1字节的前两位固定为10
     128.0.0.1 – 191.255.255.255
     
     10 00 0000 0000 0000 -- 1011 1111 1111 1111  范围 128.0  -- 191.255


     C类地址
     前3个字节是网络地址,最后1个字节是主机地址。第1字节的前3位固定为110
     192.0.0.1 – 223.255.255.255


     1100 0000 0000 0000 0000 0000  -- 110 1 1111 1111 1111 1111 1111 范围 192.0.0 -- 223.255.255
     
     D类地址(组播地址)
     不分网络地址和主机地址,第1字节的前4位固定为1110
     224.0.0.1 – 239.255.255.255
     224.0.0.1 -- 224.255.255.255  也是保留的地址(部分保留)


     E类地址
     保留地址


【3】组播编程流程


    发送者流程:


    1-- 创建用户数据报套接字
        socket();


    2-- 填充组播信息结构体
        接收方地址指定为组播地址
        指定端口信息


    3-- 发送数据包
        sendto()




   接收者流程:
    1-- 创建用户数据报套接字
        socket();


    2-- 加入多播组
     /* IPv4 multicast request.  */
      struct ip_mreq                                                              
       {
       /* 组播的IP地址  */
         struct in_addr imr_multiaddr;


       /* 本地的IP地址  */
         struct in_addr imr_interface;
       };


       struct ip_mreq  mreq;
       mreq.imr_multiaddr.s_addr = ...;
       mreq.imr_interface.s_addr = ...;


        setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP, &mreq ,sizeof(mreq));


    3-- 绑定
       绑定组播IP地址和端口
       绑定的端口必须和发送方指定的端口相同


    4-- 等待接收数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值