• 组播的实现


    组播通信

    通信步骤:

    组播发送:

    1、 创建数据报套接字socket()

    2、 接收方地址指定为组播地址(ip port

    3、 发送数据包sendto()

    4、 关闭套接字close()

    组播的接受:

    1、 创建数据报套接字

    2、 加入多播组

    struct ip_mreq

    {

    struct in_addr imr_multiaddr;

    struct in_addr imr_interfacd;

    };//头文件中已包含不需要定义

    struct ip_mreq mreq;

    mreq.imr_multiaddr.s_addr=inet_addr(“224.10.10.1”);

    mreq.imr_interface.s_addr=htol(INADDR_ANY);

    Setsockopt(sockfd,IPPROTO_IP,IP_ADDR_MEMBERSHIP,&mreq,sizeof(mreq));

    3、 绑定本机ipport bind()

    4、 接受数据recvfrom()

     

    组播代码范例:
    服务器(发送数据)
    #include<stdio.h>
    #include<netinet/in.h>
    #include<stdlib.h>
    #include<string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include<pthread.h>
    #include<strings.h>
    
    int main()
    {    int socketfd = socket(AF_INET,SOCK_DGRAM,0);//、、、1创建套接字socket
        struct sockaddr_in saddr;
        memset(&saddr,0,sizeof(saddr));
        saddr.sin_family = AF_INET;//、、、、、、、2、指定发送地址,(为组播地址)
        saddr.sin_port = htons(6000);
        saddr.sin_addr.s_addr = inet_addr("230.1.1.1");//发送给组播ip
        char *buf = "hello";
        
        sendto(socketfd,buf,strlen(buf),0,(struct sockaddr *)&saddr,s);    //、、、、3、发送数据
        close(socketfd);
    
    }
    
    客户端(接受数据)
    #include<stdio.h>
    #include<netinet/in.h>
    #include<stdlib.h>
    #include<string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include<pthread.h>
    #include<strings.h>
    int main()
    {    
    int socketfd = socket(AF_INET,SOCK_DGRAM,0);//、、、、、、、1、创建套接字socket
        struct sockaddr_in saddr;
        memset(&saddr,0,sizeof(saddr));
        saddr.sin_family = AF_INET;
        saddr.sin_port = htons(6000);
        saddr.sin_addr.s_addr = htonl(INADDR_ANY);
        struct ip_mreq mreq;
        bzero(&mreq,sizeof(struct ip_mreq));
        mreq.imr_multiaddr.s_addr = inet_addr("230.1.1.1");//组播的ip
        mreq.imr_interface.s_addr = htonl(INADDR_ANY);
    
        setsockopt(socketfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));//、、、2、加入多播组
        int s = sizeof(struct sockaddr_in);    
        bind(socketfd,(struct sockaddr *)&saddr,s);//、、、、3、绑定本机ip
        struct sockaddr_in caddr;
        char buf1[20];
        int n;
        n = recvfrom(socketfd,buf1,20,0,(struct sockaddr *)&caddr,&s);//、、4、绑定本机ip
            buf1[n] = '';
            printf("%s
    ",buf1);
        close(socketfd);//、、、、、、、、5、关闭socket
    
    }

     

     

  • 相关阅读:
    hdu 1695 GCD 欧拉函数 + 容斥
    E. Xenia and Tree 分块 + LCA
    二分图匹配 + 构造 E. Arpa’s overnight party and Mehrdad’s silent entering
    Win系统如何修改远程桌面端口3389
    centos7下使用selenium实现文件上传
    windows下tesseract-ocr的安装及使用
    windows下pycharm输入法跟随设置
    django 外键使用select html
    xstart访问centos7
    Centos7 安装VNC实现远程桌面
  • 原文地址:https://www.cnblogs.com/defen/p/5288157.html
Copyright © 2020-2023  润新知