首页 > 解决方案 > 使用 WSARecvMsg 时查找多播 UDP 数据包的发送者

问题描述

我正在尝试检索多播数据包的发送者的 ip 以及多播数据包发送到的目标地址/接口。

当接收多播数据包recvfrom(SOCKET s, char *buf, int len, int flags, sockaddr *from, int *fromlen)时,通过 from 参数返回发送者 IP,但是没有提供有关数据包发送到的地址的信息。

为了克服这个缺点,recvfrom()我尝试使用WSARecvMsg()它应该提供所有所需的信息。其他问题的答案似乎都非常有信心,可以使用(至少 *nix)recvmsg 方法获取所需的所有信息。

当接收到带有结构的数据包WSARecvMsg()并检查其IN_PKTINFO结构时,它包含以下内容:

typedef struct in_pktinfo {
  IN_ADDR ipi_addr;
  ULONG   ipi_ifindex;
} IN_PKTINFO, *PIN_PKTINFO

文档中,成员ipi_addr是目标地址,并且ipi_ifindex是接收它的接口。

从上面看来,似乎WSARecvMsg()只能提供另一半(即目的地)而不能提供发件人信息。

我错过了什么吗?还是有另一种方法来获取我想要的信息,最好不必求助于原始套接字?

标签: cwindowssocketsmulticastrecvmsg

解决方案


推荐阅读