#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<winsock2.h>
#include<ws2ipdef.h>
#include<stdio.h>
#pragma comment(lib, "ws2_32.lib")
int main()
{
WORD wVersionRequested = MAKEWORD(2, 2);//版本
WSADATA wsaDATA;
//打开网络库
if (WSAStartup(wVersionRequested, &wsaDATA) != 0)
{
printf("打开网络库失败!\n");
return -1;
}
ip_mreq mreq;
int TTL = 8;
mreq.imr_interface.S_un.S_addr = inet_addr("127.0.0.1");//本地IP
mreq.imr_multiaddr.S_un.S_addr = inet_addr("234.2.3.4");//多播组IP
SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);//创建Socket句柄,多播只支持UDP
if (setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&TTL, sizeof(TTL)) != 0)//设置TTL
{
printf("setsockopt设置TTL失败!\n");
closesocket(sock);//关闭Socket句柄
WSACleanup();//关闭网络库
return -1;
}
if (setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&mreq, sizeof(ip_mreq)) != 0)//加入多播组
{
printf("setsockopt设置TTL失败!\n");
closesocket(sock);//关闭Socket句柄
WSACleanup();//关闭网络库
return -1;
}
struct sockaddr_in localif;
localif.sin_family = AF_INET;
localif.sin_port = htons(9527);//用htons宏将整型转为端口号的无符号整型
localif.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//使用多播IP作为目标IP
if (SOCKET_ERROR == bind(sock, (const struct sockaddr*)&localif, sizeof(localif)))
{
int err = WSAGetLastError();//取错误码
printf("bind失败错误码为:%d\n", err);
closesocket(sock);//释放
WSACleanup();//清理网络库
return 0;
}
char Recvbuf[0x100] = { 0 };
int Recvlen = sizeof(localif);
while (1)
{
//用recv简单直接收取消息
if (recv(sock, Recvbuf, sizeof(Recvbuf), 0) == SOCKET_ERROR)
{
int err = WSAGetLastError();//取错误码
printf("recv失败错误码为:%d\n", err);
continue;
}
//也可以用recvfrom,额外获取发送方IP地址
//struct sockaddr_in sa;
//int iSaLen = sizeof(sa);
//if (recvfrom(sock, Recvbuf, sizeof(Recvbuf), 0, (struct sockaddr*)&sa,&iSaLen) == SOCKET_ERROR)
//{
// int err = WSAGetLastError();//取错误码
// printf("recv失败错误码为:%d\n", err);
// continue;
//}
//printf("%s\n", inet_ntoa(sa.sin_addr));
printf("%s\n", Recvbuf);
}
closesocket(sock);//关闭Socket句柄
WSACleanup();//关闭网络库
return 0;
}
windows网络编程,udp多播例程,基于C语言
需积分: 9 132 浏览量
2022-08-31
21:36:52
上传
评论 1
收藏 21.41MB ZIP 举报
不会写代码的郭靖
- 粉丝: 1
- 资源: 9
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0