UDP组播

UDP组播

UDP(UserDatagram Protocol)
中文名用户数据报协议,是OSI参考模型中一种无连接的传输层协议,是一种高效但不可靠传输。UDP在IP报文中的协议号是17。

UDP传递方式
UDP有三种传输方式:单播、广播、多播。
1.单播Unicast:客户端与服务器之间点对点连接。
2.广播BroadCast:主机一对所有的通讯模式,广播者可以向网络中所有主机发送信息。广播禁止在Internet宽带网上传输。
3.多播MultiCast:即组播。主机一对一组的通讯模式,只有加入了同一个组的主机才可以收到此组内的所有数据。

组播地址
1.地址范围:D类IP地址。范围:224.0.0.0~239.255.255.255
2.组播组:永久/临时。永久组播组一般由官方分配。
3.224.0.0.0~224.0.0.255为预留的组播地址,即永久组地址。地址224.0.0.0保留不做分配,其它地址供路由协议使用。
4.224.0.1.0~224.0.1.255是公用组播地址,可以用于Internet。
5.224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效。
6.239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。

# 组播的原理
用户申请组播组,且组播组被维护在路由器中,通过路由器向改组播组内的用户进行消息的转发。广域网通信,一般网络设备默认阻止组播协议通过。

组播的基本步骤
1.建立socket
2.socket和端口绑定
3.加入组播组(关键步骤)
4.通过sendto/recvfrom进行数据收发
5.关闭socket

UDP应用
包总量较少的通信
视频、音频多媒体通信(即时通信)
广播通信

组播流程图
在这里插入图片描述

主要函数
setsockopt设置套接字选项可以设置多播的一些相关信息
IP_MULTICAST_TTL //设置多播的跳数值
IP_ADD_MEMBERSHIP //将主机的指定接口加入多播组,以后就从这个指定的接口发送与接收数据
IP_DROP_MEMBERSHIP //主机退出多播组
IP_MULTICAST_IF //获取默认的接口或设置多播接口
IP_MULTICAST_LOOP //设置或禁止多播数据回送,即多播的数据是否回送到本地回环接口 例子:
int ttl = 255;
setsockopt(socket, IPPROTO_IP, IP_MULTICAST_TTL, &ttl,sizeof(ttl));
//设置跳数 socket -套接字描述符 PROTO_IP -选项所在的协议层 IP_MULTICAST_TTL -选项名 &ttl -设置的内存缓冲区 sizeof(ttl) -设置的内存缓冲区长度

C++代码实现
1.关键代码加入组播组:

    struct ip_mreq mreq;    //组播结构体
    /* use setsockopt() to request that the kernel join a multicast group */    
    mreq.imr_multiaddr.s_addr=inet_addr(GROUP_IP);     //组播组的ip地址  
    mreq.imr_interface.s_addr=htonl(INADDR_ANY);       //加入的客户端主机的ip地址  INADDR_ANY为0.0.0.0,泛指本机,表示本机所有的ip.

    //客户端只有在加入多播组后才能接受多播组的数据
    if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char *)&mreq,sizeof(mreq)) < 0)   
    {    
        return GetLastError();
    }    

2.Demo后期再补

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页