以下是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()
{
// 初始化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("
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());
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;
}
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/21863.html