zoukankan      html  css  js  c++  java
  • 组播的实现

    组播通信

    通信步骤:

    组播发送:

    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
    
    }

     

     

  • 相关阅读:
    CC学iOS杂记 001_Device
    低字节序和高字节序相互转换(Little Endian/Big Endian)
    wpf 控件复制 克隆
    压缩图片
    网络流转换为Byte数组
    JS屏蔽右键菜单,复制,粘帖xxxxx........
    记录详细错误信息
    Media Queries详解--转
    解决 asp.net 伪静态 IIS设置后 直正HTML无法显示的问题
    对C#泛型实例化对像--转
  • 原文地址:https://www.cnblogs.com/defen/p/5288157.html
Copyright © 2011-2022 走看看