Server
#include <stdio.h> #include <Ws2tcpip.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") #define PORT 6060 #define IP "ff02::2" #define BUF_LEN 256 int main(int argc, char* argv[]) { WSADATA wsaData; WORD wVersionRequested; // 版本 wVersionRequested = MAKEWORD(1, 1); //版本信息 WSAStartup(wVersionRequested, &wsaData); //初始化Windows套接字库 //使用此结构来指定将套接字连接到的本地或远程端点地址 struct sockaddr_in6 addr = { AF_INET6, htons(PORT) }; //创建一个UDP套接字 int l_nServer; if ((l_nServer = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { perror("创建失败"); return -1; } bind(l_nServer, (struct sockaddr*)&addr, sizeof(addr)); //ipv6_mreq结构提供了用于IPv6地址的多播组的信息。 struct ipv6_mreq group; //将接口索引指定为0,则使用默认的多播接口。 group.ipv6mr_interface = 0; //IPv6组播组的地址。 inet_pton(AF_INET6, IP, &group.ipv6mr_multiaddr); //将套接字加入到指定接口上提供的多播组。此选项仅对数据报和原始套接字有效(套接字类>型必须为SOCK_DGRAM或SOCK_RAW)。 setsockopt(l_nServer, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (char*)&group, sizeof(group)); int l_naddLen = sizeof(addr); int l_nReadLen = 0; char msgbuf[BUF_LEN]; printf("等待接收 "); while (1) { l_nReadLen = recvfrom(l_nServer, msgbuf, BUF_LEN, 0, (struct sockaddr*)&addr, &l_naddLen); if (l_nReadLen < 0) { perror("接收失败"); exit(1); } msgbuf[l_nReadLen] = '