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("等待接收\n"); 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] = '\0'; printf("%s\n", msgbuf); ? strcpy_s(msgbuf, "world"); int l_nLen = sendto(l_nServer, msgbuf, strlen(msgbuf), 0, (struct sockaddr*)&addr, sizeof(addr)); if (l_nLen < 0) { perror("發送失敗"); exit(1); } printf("Send %s\n", msgbuf); } return 0; }
Cilect
#include <stdio.h> #include <Ws2tcpip.h> #include <winsock2.h> #define HELLO_PORT 7905 #define HELLO_GROUP "224.0.0.1" #pragma comment(lib,"ws2_32.lib") ? int main(int argc, char* argv[]) { WSADATA wsaData; WORD wVersionRequested; wVersionRequested = MAKEWORD(1, 1); // Initialize Windows socket library WSAStartup(0x0202, &wsaData); int l_nCilect; ? struct sockaddr_in6 addr = { AF_INET6, htons(6060) }; ? /* 創建一個UDP套接字 */ if ((l_nCilect = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { perror("創建失敗"); exit(1); } inet_pton(AF_INET6, "ff02::2", &addr.sin6_addr); ? char message[128]; int l_naddLen = sizeof(addr); while (1) { strcpy_s(message, "hello"); int l_nLen = sendto(l_nCilect, message, strlen(message), 0, (struct sockaddr*)&addr, sizeof(addr)); if (l_nLen < 0) { perror("發送失敗"); exit(1); } printf("Send %s\n", message); Sleep(1000); int l_nReadLen = recvfrom(l_nCilect, message, strlen(message), 0, (struct sockaddr*)&addr, &l_naddLen); if (l_nReadLen < 0) { perror("接收失敗"); exit(1); } message[l_nReadLen] = '\0'; printf("%s\n", message); ? } ? return 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/239864.html
標籤:C++
