1. 程式人生 > 實用技巧 >linux下 IPv6組播(C++)

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("等待接收資訊!\n"); //接收資料 char buffer[128]; read(fd, buffer, sizeof(buffer)); printf("%s\n", 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; }