• linux下 IPv6组播(C++)


     

     

    Server

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <arpa/inet.h>
     
    int main()
    {
        //创建套接字
        int fd = socket(AF_INET6, SOCK_DGRAM, 0);
    ​
        //绑定本地网络信息
        struct sockaddr_in6 address = {AF_INET6, htons(6060)};
        bind(fd, (struct sockaddr*)&address, sizeof address);
    ​
        //ipv6_mreq结构提供了用于IPv6地址的多播组的信息。
        struct ipv6_mreq group;
        //将接口索引指定为0,则使用默认的多播接口。
        group.ipv6mr_interface = 0;    
        //IPv6组播组的地址。
        inet_pton(AF_INET6, "ff02::1", &group.ipv6mr_multiaddr);  
        //将套接字加入到指定接口上提供的多播组。此选项仅对数据报和原始套接字有效(套接字类>型必须为SOCK_DGRAM或SOCK_RAW)。
        setsockopt(fd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, &group, sizeof(group));
    ​
        printf("等待接收信息!
    ");
        //接收数据
        char buffer[128];
        read(fd, buffer, sizeof(buffer));    
        printf("%s
    ", buffer);
        return 0;
    ​
    }

    Cilect

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <arpa/inet.h>
    #include <net/if.h>
     
    int main()
    {
        // 创建套接字
        int fd = socket(AF_INET6, SOCK_DGRAM, 0);
    ​
        // ADDRESS
        struct sockaddr_in6 address = {AF_INET6, htons(6060)};
        //这个函数转换字符串到网络地址,第一个参数af是地址簇,第二个参数*src是来源地址,第三个参数* dst接收转换后的数据。
        inet_pton(AF_INET6, "ff02::1", &address.sin6_addr);
    ​
        //发送数据
        char buffer[128];
        strcpy(buffer, "");
        sendto(fd, "hello world!", sizeof buffer, 0, (struct sockaddr*)&address, sizeof address);
        return 0;
    }
  • 相关阅读:
    NDK中使用pthread多线程中自己写的一个BUG
    Android Native crash日志分析
    Android细笔记--DataStorage
    求二叉树第n层节点数
    对YUV数据进行裁剪
    Android XML中引用自定义内部类view的四个why
    Android细笔记--ContentProvider
    Android Log Tag含义
    189-RotaeArray
    二分查找法
  • 原文地址:https://www.cnblogs.com/IntelligencePointer/p/14186663.html
Copyright © 2020-2023  润新知