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

udp的广播和组播(udp 广播)以下是 Windows 平台下基于 Winsock 的 UDP 组播 接收的示例代码 include lt stdio h gt include lt stdlib h gt include lt winsock2 h gt define MULTICAST IP 224 0 0 1

大家好,我是讯享网,很高兴认识大家。

以下是Windows平台下基于Winsock的UDP组播接收的示例代码:


讯享网

#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;winsock2.h&gt; #define MULTICAST_IP &quot;224.0.0.1&quot; // <em>组播</em>IP地址 #define LOCAL_IP &quot;192.168.1.100&quot; // 本地IP地址 #define PORT 8888 // <em>端</em>口号 #define MAX_BUF_LEN 1024 // 缓冲区大小 int main() { // 初始化Winsock WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &amp;wsaData) != 0) { printf(&quot;WSAStartup failed with error code %d &quot;, WSAGetLastError()); return 1; } // 创建套接字 <em>SOCKET</em> sock = <em>socket</em>(AF_INET, SOCK_DGRAM, IPPROTO_<em>UDP</em>); if (sock == INVALID_<em>SOCKET</em>) { printf(&quot;<em>socket</em> failed with error code %d &quot;, WSAGetLastError()); WSACleanup(); return 1; } // 绑定本地IP地址和<em>端</em>口号 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*)&amp;localAddr, sizeof(localAddr)) == <em>SOCKET</em>_ERROR) { printf(&quot;bind failed with error code %d &quot;, WSAGetLastError()); close<em>socket</em>(sock); WSACleanup(); return 1; } // 加入<em>组播</em>组 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*)&amp;mreq, sizeof(mreq)) == <em>SOCKET</em>_ERROR) { printf(&quot;setsockopt failed with error code %d &quot;, WSAGetLastError()); close<em>socket</em>(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*)&amp;fromAddr, &amp;fromLen); if (recvLen &gt; 0) { buf[recvLen] = &#39;0&#39;; printf(&quot;Received message from %s: %s &quot;, inet_ntoa(fromAddr.sin_addr), buf); } } // 退出<em>组播</em>组 if (setsockopt(sock, IPPROTO_IP, IP_DROP_MEMBERSHIP, (char*)&amp;mreq, sizeof(mreq)) == <em>SOCKET</em>_ERROR) { printf(&quot;setsockopt failed with error code %d &quot;, WSAGetLastError()); close<em>socket</em>(sock); WSACleanup(); return 1; } // 关闭套接字 close<em>socket</em>(sock); // 清理Winsock WSACleanup(); return 0; } 

讯享网
小讯
上一篇 2025-05-23 11:49
下一篇 2025-04-15 17:55

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/138077.html