wsajoinleaf-windows组播如何指定接口地址?

问题描述

windows组播如何指定接口地址?

在unix中,组播通信时,IP_ADD_MEMBERSHIP时可通过ip_mreq::imr_interface.s_addr指定接口地址,在windows中采用WSAJoinLeaf如何指定接口地址?

指定接口地址的目的是发送时,通过指定的IP发送出去,不由系统采用默认方案。当多网卡时该参数是很有用的,并且当需要支持回环时,更需要该参数。例如:

某组播通信中每个节点都有不同的身份(即节点号),不允许相同节点号的两个实例在网络中同时运行,所以在设计握手信息时,设计了‘节点号’和‘进程号’两个参数。那么重复节点的过滤方案可以设计如下:
if(nNode==m_nNode)//如果信令中的节点号和程序的当前节点号相同
{
if(nFromAddr != m_nItfAddr || nPid != m_nPid)
{//nFromAddr是由recvfrom返回的接口地址
//m_nItfAddr是当前程序配置的接口地址
//nPid是信令中的进程号,m_nPid是当前进程的进程号。
//表示收到了重复节点的消息,非因回环而引起的重复消息,需要提示
// * ** 如果在程序启动过程中发现这个问题,是不允许启动的 ** * 。
}
}

因为WSAJoinLeaf无法指定接口地址,可能造成配置的接口地址m_nItfAddr,和实际发消息时采用的接口地址不一致,当允许回环时,当前进程发出的消息,被自己收到了,但可能不认为是自己的,因为nFromAddr != m_nItfAddr。而导致系统无法启动。

试想用bind来解决,但不行,因为bind主要是设置接收地址,组播通信中往往设置为INADDR_ANY(端口和组播端口一样)。并且如果设置为m_nItfAddr,发现回环选项失效了(不会回环),那么同机部署同一组播的不同应用变得不可能了。

其实winsock1是支持IP_ADD_MEMBERSHIP的,不知为啥winsock2不支持了,但由必须用到winsock2的特殊功能,而winsock1和winsock2由无法共存于同一进程。

请教各路高手,在windows下如何解决这个问题。

时间: 2024-11-09 03:09:47

wsajoinleaf-windows组播如何指定接口地址?的相关文章

《IP组播(第1卷)》一2.3 组播数据帧的交换

2.3 组播数据帧的交换 二层交换机会根据目的MAC地址将数据帧发送到物理接口或逻辑接口.组播MAC地址与单播MAC地址是不同的,因为单播MAC地址应该是唯一的,它应该对应着唯一一个目的接口.组播MAC地址可能会对应着多个目的接口,这取决于有多少台设备请求接收这个IP组播流中的内容. 在二层交换机能够转发组播数据帧之前,它必须知道应该把消息发往哪些目的接口.它会在目的接口列表中记录需要接收这个组播数据帧的接口,这个列表中只包含那些注册了这个组播流的设备所连接的接口.工程师可以在目的接口列表中静态

《IP组播(第1卷)》一2.2 MAC地址映射

2.2 MAC地址映射 传统以太网交换机(二层设备)负责处理以太网数据帧,传统路由器(三层设备)负责查看数据包,来决定如何处理这个消息.如第1章中讨论的,当设备发送的是广播数据帧时,目的地址代表所有设备,而单播消息的目的地址代表一个目的MAC地址. 如果发送方发送的是组播消息会发生什么?为了优化网络资源,以太网交换机也需要能够处理组播.这也是关键的地方.发送方设备必须将目的IP组播地址按照以下方式,转换成具体的MAC地址. 最高的25比特是官方为组播预留的MAC地址范围:0100.5E00.00

组播条件下如何指定本机地址为发送源 C#

问题描述 目前的情况描述如下:组播的接收方都需要指定发送源以后才能接收数据,如果组播数据的发送方ip不在指定的源列表里面,则无法接受到数据.现在题主能收到对方发送过来的数据,但是对方无法接收到我发送的数据,经过问题排查以后大概可以定位到我在发送组播数据的时候没有将我的ip指定为发送源.小弟的分数不多,还望各位大侠不吝赐教.谢过!!!!!! 解决方案 解决方案二:不要沉呀......急用!!!!解决方案三:你确定是在发送时没有将自己的IP指定为发送源而引起的?我觉得只要接收方加入这个组,就可以收到

与众不同 windows phone (33) - Communication(通信)之源特定组播 SSM(Source Specific Multicast)

原文:与众不同 windows phone (33) - Communication(通信)之源特定组播 SSM(Source Specific Multicast) [索引页][源码下载] 与众不同 windows phone (33) - Communication(通信)之源特定组播 SSM(Source Specific Multicast) 作者:webabcd 介绍与众不同 windows phone 7.5 (sdk 7.1) 之通信 实现"源特定多播" - SSM(So

与众不同 windows phone (32) - Communication(通信)之任意源组播 ASM(Any Source Multicast)

原文:与众不同 windows phone (32) - Communication(通信)之任意源组播 ASM(Any Source Multicast) [索引页][源码下载] 与众不同 windows phone (32) - Communication(通信)之任意源组播 ASM(Any Source Multicast) 作者:webabcd 介绍与众不同 windows phone 7.5 (sdk 7.1) 之通信 实现"任意源多播" - ASM(Any Source M

常用的组播保留地址列表

224.0.0.0 - Base address 224.0.0.1 - 网段中所有支持多播的主机 224.0.0.2 - 网段中所有支持多播的路由器 224.0.0.4 - 网段中所有的DVMRP路由器 224.0.0.5 - 所有的OSPF路由器  224.0.0.6 - 所有的OSPF指派路由器 224.0.0.7 - 所有的ST路由器 224.0.0.8 - 所有的ST主机 224.0.0.9 - 所有RIPv2路由器 224.0.0.10 - 网段中所有支的路由器 224.0.0.11

C++UDP组播编程中,组播地址(组播号)与组播地址的关系是什么?和TCP中IP和端口的关系一样吗?

问题描述 C++UDP组播编程中,组播地址(组播号)与组播地址的关系是什么?和TCP中IP和端口的关系一样吗? C++UDP组播编程中,组播地址(组播号)与组播地址的关系是什么?和TCP中IP和端口的关系一样吗?另外,一台计算机上(不经过路由器或交换机)只能有一个组播吗?急求!!! 解决方案 组播地址和多播地支的关系与TCP中IP和端口的关系不太一样. 首先,网卡查看由信道传送过来的帧,确定是否接收该帧,若接收后就将它传往设备驱动程序.通常网卡仅接收那些目的地址为网卡物理地址或广播地址的帧. 使

如何实现端口静态添加组播MAC地址

组播MAC地址是一类逻辑的MAC地址,该MAC地址代表一个组播组,所有属于该组的成员都接收以该组对应的组播MAC地址为目的地址的数据帧. 为了更进一步了解组播及MAC地址的概念,让我们 来看下面的配置:案例需求1.在二层的组播过程中,除了通过二层组播协议动态建立组播转发表项外,还可以通过手工配置组播MAC地址表项,将端口与组播地址表项进行静态绑定.通常情况下,如果交换机收到的组播数据报文中的组播地址没有在本机注册,该报文会在该端口所在的VLAN内广播,通过配置组播静态MAC地址表项可以避免这种情

单播、多播(组播)和广播的区别

单播.多播和广播单播"(Unicast)."多播"(Multicast)和"广播"(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语.那么这些术语究竟是什么意思?区别何在? 1.单播:网络节点之间的通信就好像是人们之间的对话一样.如果一个人对另外一个人说话,那么用网络技术的术语来描述就是"单播",此时信息的接收和传递只在两个节点之间进行.单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一