linux下 IPv6組播(C++)
阿新 • • 發佈:2020-12-25
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, (structsockaddr*)&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; }