udp的广播和组播(udp 广播)

udp的广播和组播(udp 广播)以下是 Windows 平台下基于 Winsock 的 UDP 组播 接收的示例代码 c 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 winsock2 h stdlib h stdio h

以下是Windows平台下基于Winsock的

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() { // 初始化Winsock WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("WSAStartup failed with error code %d ", WSAGetLastError()); return 1; }  // 创建套接字  SOCKET sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_ UDP ); if (sock == INVALID_ SOCKET ) { printf(" socket failed 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()); close socket (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()); close socket (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()); close socket (sock); WSACleanup(); return 1; }  // 关闭套接字 close socket (sock);  // 清理Winsock WSACleanup();  return 0; } 
今天的文章 udp的广播和组播(udp 广播)分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-10-12 12:57
下一篇 2025-02-24 20:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/5433.html