以下是Windows平台下基于Winsock的
UDP 组播接收的示例代码:
今天的文章 udp的广播和组播(udp 广播)分享到此就结束了,感谢您的阅读。#include <stdio.h>#include <stdlib.h>#include <winsock2.h>#define MULTICAST_IP "224.0.0.1" //组播IP地址#define LOCAL_IP "192.168.1.100" // 本地IP地址#define PORT 8888 //端口号#define MAX_BUF_LEN 1024 // 缓冲区大小int main(){// 初始化WinsockWSADATA wsaData;if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {printf("WSAStartup failed with error code %d", WSAGetLastError());return 1;}// 创建套接字SOCKETsock =socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (sock == INVALID_SOCKET) {printf("socketfailed with error code %d", WSAGetLastError());WSACleanup();return 1;}// 绑定本地IP地址和端口号struct sockaddr_in localAddr;localAddr.sin_family = AF_INET;localAddr.sin_addr.s_addr = inet_addr(LOCAL_IP);localAddr.sin_port = htons(PORT);if (bind(sock, (struct sockaddr*)&localAddr, sizeof(localAddr)) ==SOCKET_ERROR) {printf("bind failed with error code %d", WSAGetLastError());closesocket(sock);WSACleanup();return 1;}// 加入组播组struct ip_mreq mreq;mreq.imr_multiaddr.s_addr = inet_addr(MULTICAST_IP);mreq.imr_interface.s_addr = inet_addr(LOCAL_IP);if (setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&mreq, sizeof(mreq)) ==SOCKET_ERROR) {printf("setsockopt failed with error code %d", WSAGetLastError());closesocket(sock);WSACleanup();return 1;}// 接收数据char buf[MAX_BUF_LEN];struct sockaddr_in fromAddr;int fromLen = sizeof(fromAddr);int recvLen;while (1) {recvLen = recvfrom(sock, buf, MAX_BUF_LEN, 0, (struct sockaddr*)&fromAddr, &fromLen);if (recvLen > 0) {buf[recvLen] = '0';printf("Received message from %s: %s", inet_ntoa(fromAddr.sin_addr), buf);}}// 退出组播组if (setsockopt(sock, IPPROTO_IP, IP_DROP_MEMBERSHIP, (char*)&mreq, sizeof(mreq)) ==SOCKET_ERROR) {printf("setsockopt failed with error code %d", WSAGetLastError());closesocket(sock);WSACleanup();return 1;}// 关闭套接字closesocket(sock);// 清理WinsockWSACleanup();return 0;}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/5433.html